2013-02-01 88 views
2

可能重複:
Reference - What does this symbol mean in PHP?與作爲算術運算符在PHP

我的工作,我遇到下列函數來了一些舊代碼:

function is_odd($number) { 
    return $number & 1; // 0 = even, 1 = odd 
} 

我從來沒有見過一種方法來檢查一個數字是否像以前那樣是奇怪的,並且只是試圖解開了解他們實際上在做什麼。

+0

http://en.wikipedia.org/wiki/Bitwise_operation –

+3

[參考 - 此符號在PHP中的含義是什麼?](http:// stackoverflow.com/questions/3737139/reference-what-does-this-symbol-mean-in-php) –

+0

這是更多的數學問題,而不是一個誠實的PHP問題。 –

回答

7

&bitwise-and,它基本上是這樣的作品,每比特是在兩個操作數1,它產生的結果值10所有其他位。如果你轉換任何數量的位表示,你快看,它是決定一個數是否爲偶數或奇數,例如最低位:

5 = 101 
    10 = 1010 
    13 = 1101 
1030 = 10000000110 

的最低位(最右邊的一個,也稱爲最低有效位)對於每個奇數都是1,對於每個偶數都是0。做$n & 1總是會產生0除了最低位以外的其他位(因爲數字1只有一位,您可以想象剩下的位用0填充以匹配另一個操作數的長度)。所以基本上操作歸結爲比較操作數的最低位,並且1 & 1是1,所有其他組合都是0.因此,基本上當$n & 1產生1時,這意味着該數字是奇數,否則是偶數。

編輯。

下面是幾個例子來說明如何按位和作品,因爲我前面給的例子值,在括號中的數字是原來的十進制數:

101 (5) 
& 001 (1) 
    --- 
    001 (1) = true 


    1010 (10) 
& 0001 (1) 
    ---- 
    0000 (0) = false 


    1101 (13) 
& 0001 (1) 
    ---- 
    0001 (1) = true 


    10000000110 (1030) 
& 00000000001 (1) 
    ----------- 
    00000000000 (0) = false 

從這裏就可以很容易地看到,只有當兩個操作數的最右邊位都是1時結果才爲真。