綜觀其他開發人員編寫一些代碼的怪使用,我碰到這個來了。交替的顏色工作正常。交替錶行樣式位運算符
如果我寫這個,我會使用模運算符(%)而不是按位運算符(&)。
爲什麼按位運算符在這種情況下工作?使用此方法而不是模數運算符有什麼優勢嗎?
綜觀其他開發人員編寫一些代碼的怪使用,我碰到這個來了。交替的顏色工作正常。交替錶行樣式位運算符
如果我寫這個,我會使用模運算符(%)而不是按位運算符(&)。
爲什麼按位運算符在這種情況下工作?使用此方法而不是模數運算符有什麼優勢嗎?
&
運算符對數字進行按位比較。所以,如果你
$i & 1
它就會告訴你,如果「1」標誌設置,例如在二進制:
001010111010
最後一個數字是「1」標誌(記住,二進制以相反的順序變爲1,2,4,8等),在這種情況下設置爲0.
因爲1是二進制中唯一的奇數標誌,所以它會告訴你數字是奇數或偶數。
如果$ i是3例如,那麼在二進制它將是011 - 最後一個數字是1(1標誌),因此$i & 1
將爲真。
如果$ i是4例如,那麼在二進制它將是100 - 最後一個數字是0(1標誌),因此$i & 1
將是錯誤的。
感謝您的回答,這是有道理:) – psynnott 2012-07-16 10:36:41
它的工作原理是,如果數字是奇數,則第一位總是1;如果數量是偶數,則第一位總是0。
1
10
11
100
101
110
111
etc.
理論上位運算比模運算速度更快,但它可能是解釋無論如何都會下降優化模操作位運算。
爲什麼其他開發人員使用它,我們只能猜測:出於習慣的,從什麼地方複製粘貼,不知道模運算符,炫耀,希望優化...
我基於模數與按位操作,模數稍快(0.035%),所以它幾乎不重要,但仍然 - 稍快。可能是模運算符有一些優化,我真的不知道,但它看起來像模數和按位比較都是足夠好的解決方案。不過,很好的答案,+1。 – 2012-07-16 10:30:57
感謝您的回答 – psynnott 2012-07-16 10:36:21
這實際上是相當乾淨的方式來做這個操作。我喜歡。 – KingCronus 2012-07-16 10:42:55