2012-07-16 71 views
9

綜觀其他開發人員編寫一些代碼的怪使用,我碰到這個來了。交替的顏色工作正常。交替錶行樣式位運算符

如果我寫這個,我會使用模運算符(%)而不是按位運算符(&)。

爲什麼按位運算符在這種情況下工作?使用此方法而不是模數運算符有什麼優勢嗎?

+1

這實際上是相當乾淨的方式來做這個操作。我喜歡。 – KingCronus 2012-07-16 10:42:55

回答

9

&運算符對數字進行按位比較。所以,如果你

$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將是錯誤的。

+0

感謝您的回答,這是有道理:) – psynnott 2012-07-16 10:36:41

4

它的工作原理是,如果數字是奇數,則第一位總是1;如果數量是偶數,則第一位總是0。

1 
10 
11 
100 
101 
110 
111 
etc. 

理論上位運算比模運算速度更快,但它可能是解釋無論如何都會下降優化模操作位運算。

爲什麼其他開發人員使用它,我們只能猜測:出於習慣的,從什麼地方複製粘貼,不知道模運算符,炫耀,希望優化...

+2

我基於模數與按位操作,模數稍快(0.035%),所以它幾乎不重要,但仍然 - 稍快。可能是模運算符有一些優化,我真的不知道,但它看起來像模數和按位比較都是足夠好的解決方案。不過,很好的答案,+1。 – 2012-07-16 10:30:57

+0

感謝您的回答 – psynnott 2012-07-16 10:36:21