2013-01-10 34 views
-1

我偶然发现了一些奇怪的东西,而且我在任何地方都找不到任何答案。 & =似乎将偶数解释为假。有没有合理的解释,或者这是一个错误?&=在偶数上产生错误

这个片段重现问题,至少在我的设置:

$nums = array(1,2,3,4,5,6,7,8,9,10); 
$var1 = true; 
$var2 = true; 
foreach ($nums as $num) { 
    // Test 
    $var1 &= $num; 
    $var2 = $var2 && $num; 
    echo "$var1, $var2<br />"; 
    //Reset 
    $var1 = true; 
    $var2 = true; 
} 

系统:PHP版本5.3.10-1ubuntu3.4

回答

5

如果我正确理解你的问题,你很困惑Bitwise AND (&)Logical AND (&&)。不,他们不一样。

如果您检查数字的二进制表示形式,则可以更好地理解按位运算。下面是偶/奇号会发生什么:

/* 1 & 0 */ 00000001b & 00000000b // 00000000b 
/* 1 & 1 */ 00000001b & 00000001b // 00000001b 
/* 1 & 2 */ 00000001b & 00000010b // 00000000b 
/* 1 & 3 */ 00000001b & 00000011b // 00000001b 

进行逻辑运算,你只需要看看操作数的感实性

1 && 0 // false -- 0 is falsy 
1 && 1 // true -- any non-zero number is truthy 
1 && 2 // true 
1 && 3 // true 
+0

这是有道理的。我知道位运算符和逻辑运算符之间的区别,我刚才被告知,&=是x = x && y的简写形式......我必须去踢别人......很难......我一直在使用它。我觉得很愚蠢。我注意到=行为不同,它的功能是什么? – MaX

+0

'=&'是'=&'我相信......'$ a =&$ b'表示'$ a'被分配了一个对'$ b'的引用。 –

0

你正在做的一个位与上号。

以二进制的数字是......

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

意识到,当你增加的数量,至少显著的数字总是在不断变化,而且因为你是取与与1,它看起来像偶数由于结果是00000 & 10),所以数字是错误的。