&=在偶数上产生错误

MaX*_*MaX -1 php boolean operators variable-assignment

我偶然发现了一些奇怪的东西,我无法在任何地方找到任何答案.&=似乎将偶数解释为假.对此有合理的解释,还是这个错误?

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

$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;
}
Run Code Online (Sandbox Code Playgroud)

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

Sal*_*n A 5

如果我正确地理解了你的问题,你就会把Bitwise AND(&)逻辑AND(&&)混淆.不,他们不一样.

如果检查数字的二进制表示,则可以最好地理解按位运算.这是偶数/奇数的情况:

/* 1 & 0 */ 00000001b & 00000000b // 00000000b
/* 1 & 1 */ 00000001b & 00000001b // 00000001b
/* 1 & 2 */ 00000001b & 00000010b // 00000000b
/* 1 & 3 */ 00000001b & 00000011b // 00000001b
Run Code Online (Sandbox Code Playgroud)

对于逻辑运算,您只需要查看操作数的真实性:

1 && 0 // false -- 0 is falsy
1 && 1 // true  -- any non-zero number is truthy
1 && 2 // true
1 && 3 // true
Run Code Online (Sandbox Code Playgroud)