PHP 位掩码在应该为假时说真
PHP Bitmask says true when it should be false
我正在用按位与比较两个变量,它不应该 return 正确,但确实如此。这是我的代码,
if($d & $w){
return true;
} else {
return false;
}
其中 $d
是 15,$w
是 31。
为什么位掩码不同时 return 为真?
因为15和31都大于0为假,所以设置rate中的位为真。我认为你想要的是:
if(($d & $w)== true){
return true;
} else {
return false;
}
您需要使用括号来确保所需的优先级。
您不是在比较这两个变量,而是在和比较它们。按位 AND 你无法比较任何东西。
($d & $w) 表示 $d AND $w,其中 AND 是布尔运算符。您在这里输入两个整数变量,它们也会给出一个整数。如果一个整数不为空,则在比较中将其解释为 TRUE。
$d 是二进制 01111
$w 是二进制 11111
($d & $w) 显然是二进制 01111。如果你执行 var_dump($d & $w) 你会看到结果是一个整数,而不是布尔值;
因此,如果您要比较 ANDed 值,您应该选择一个比较结构,如下所示:
if ( ($d & $w) == $d ) ...
这意味着:如果 $d 和 $w 的 AND 值等于 $d。
代码示例
<?php
$d = 15;
$w = 31;
$res = ($d & $w);
echo '$d=' . decbin($d) . '<br />';
echo '$w=' . decbin($w) . '<br />';
echo '($d & $w)=' . decbin($res) . '<br />';
// Boolean AND only
if($d & $w){
echo '($d & $w) is true' . '<br />';
} else {
echo '($d & $w) is false' . '<br />';
}
// Comparison with boolean AND
if ( ($d & $w) == $d ) {
echo '(($d & $w) == $d) is true' . '<br />';
} else {
echo '(($d & $w) == $d) is false' . '<br />';
}
// Simple comparison
if ($d == $w) {
echo '($d == $w) is true' . '<br />';
} else {
echo '($d == $w) is false' . '<br />';
}
结果
$d=1111
$w=11111
($d & $w)=1111
($d & $w) is true
(($d & $w) == $d) is true
($d == $w) is false
我正在用按位与比较两个变量,它不应该 return 正确,但确实如此。这是我的代码,
if($d & $w){
return true;
} else {
return false;
}
其中 $d
是 15,$w
是 31。
为什么位掩码不同时 return 为真?
因为15和31都大于0为假,所以设置rate中的位为真。我认为你想要的是:
if(($d & $w)== true){
return true;
} else {
return false;
}
您需要使用括号来确保所需的优先级。
您不是在比较这两个变量,而是在和比较它们。按位 AND 你无法比较任何东西。
($d & $w) 表示 $d AND $w,其中 AND 是布尔运算符。您在这里输入两个整数变量,它们也会给出一个整数。如果一个整数不为空,则在比较中将其解释为 TRUE。
$d 是二进制 01111
$w 是二进制 11111
($d & $w) 显然是二进制 01111。如果你执行 var_dump($d & $w) 你会看到结果是一个整数,而不是布尔值;
因此,如果您要比较 ANDed 值,您应该选择一个比较结构,如下所示:
if ( ($d & $w) == $d ) ...
这意味着:如果 $d 和 $w 的 AND 值等于 $d。
代码示例
<?php
$d = 15;
$w = 31;
$res = ($d & $w);
echo '$d=' . decbin($d) . '<br />';
echo '$w=' . decbin($w) . '<br />';
echo '($d & $w)=' . decbin($res) . '<br />';
// Boolean AND only
if($d & $w){
echo '($d & $w) is true' . '<br />';
} else {
echo '($d & $w) is false' . '<br />';
}
// Comparison with boolean AND
if ( ($d & $w) == $d ) {
echo '(($d & $w) == $d) is true' . '<br />';
} else {
echo '(($d & $w) == $d) is false' . '<br />';
}
// Simple comparison
if ($d == $w) {
echo '($d == $w) is true' . '<br />';
} else {
echo '($d == $w) is false' . '<br />';
}
结果
$d=1111
$w=11111
($d & $w)=1111
($d & $w) is true
(($d & $w) == $d) is true
($d == $w) is false