2012-12-15 78 views
0

我無法理解下面的代碼是如何工作的。這段代碼如何工作?

$start = 1; 
while($start<10){ 
    if ($start&1) { 
     echo "ODD ".$start." <br/> "; 
    } 
    else { 
     echo "EVEN ".$start." <br/> "; 
    } 
    $start++; 
} 

$start&1將分別返回ODD和EVEN。

輸出

ODD 1 
EVEN 2 
ODD 3 
EVEN 4 
ODD 5 
EVEN 6 
ODD 7 
EVEN 8 
ODD 9 

如果我們給$start&2,而不是$start&1,它與其它順序返回。

如何&1&2等...在這裏工作?

+1

這是什麼意思'if($ start&1){'? – samayo

+1

@Eritrea這正是OP的問題:) – alfasin

回答

2

這是一個bitwise and operator

0001 --> 1 
& 0001 
    ---- 
    0001 --> 1 

    0010 --> 2 
& 0001 
    ---- 
    0000 --> 0 

    0011 --> 3 
& 0001 
    ---- 
    0001 --> 1 

根據字節序,這將是要麼在該檢查事項左邊或最右邊位。以上是與& 1.荷蘭國際集團在你第二示例中,與& 2 ING,這將是

0001 --> 1 
& 0010 
    ---- 
    0000 --> 0 

    0010 --> 2 
& 0010 
    ---- 
    0010 --> 2 

    0011 --> 3 
& 0010 
    ---- 
    0010 --> 2 

而對於進一步的比較,在這裏是用3

0001 --> 1 
& 0011 
    ---- 
    0001 --> 1 

    0010 --> 2 
& 0011 
    ---- 
    0010 --> 2 

    0011 --> 3 
& 0011 
    ---- 
    0011 --> 3 

爲了荷蘭國際集團1-3 &看看發生了什麼,請按照下面兩個數字的列。如果它們都是1,那麼結果將該位置位設置爲1.如果其中任何一個爲0,則結果在該位置爲0。因此,對於2 & 3 ..

0010 --> 2 
& 0011 
    ---- 
    0010 
    |||| 
    |||+- 0 and 1, so 0 
    ||+-- 1 and 1, so 1 
    ++--- 0 and 0, so 0 

    0010 == 2 
+0

感謝您的幫助... –

2

該代碼是基於&操作員(ANDbitwise操作者):如果最右邊的位是1 =>的數量是奇數
$start&1將返回true

例如,5的二進制表示(單數)是:

101 

1

001 

所以101 & 001將返回001這也是PHP true

+0

+1感謝您的幫助... –

0

它循環9次,每次將其與1按位ANDS(即它ANDS與所述第二二進制數位,看看它是否是2的複式),並打印相應

1

的位運算符&涉及bits。在計算機上,數字被存儲爲二進制數據(1和0,也稱爲「位」)。以下是循環中使用的數字表格。

1 = 0001 
2 = 0010 
3 = 0011 
4 = 0100 
5 = 0101 
6 = 0110 
7 = 0111 
8 = 1000 
9 = 1001 

與十進制數不同,二進制數從右到左讀取。當您查看錶格時,可以看到偶數和奇數的二進制數分別以01結尾。以0結尾的二進制數是偶數,而以1結尾的二進制數是奇數。

&按位運算符所做的基本上是從小數的二進制表示形式的最後一位數字中除去,然後將其返回。

如果我們把號5(0101),那麼我們可以將其設置在僞代碼:

if last bit in 0101 is 1 then 
    number is odd 
otherwise 
    number is even 

至於PHP代碼表達($start & 1)返回任一10。在PHP type juggling中,將1轉換爲true0轉換爲false