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
如果我正确地理解了你的问题,你就会把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)