我对按位“&”有一个小问题PHP的comperator。 我试图比较两个布尔值,但当我比较它们时,按位比较器给我一个整数而不是布尔值。
如果它们有效,则检查两个变量。如果是,则函数返回,当然是真的。
$bValue1 = true;
$bValue2 = true;
当我在var_dump中将它与按位运算符组合时,它返回int(0)。为什么呢?
var_dump($bValue1 & $bValue2);
答案 0 :(得分:2)
'&'运算符正在对位进行操作,因此它将布尔值解释为整数,然后比较这些位。
你应该使用逻辑运算符'&&'比较布尔人。
答案 1 :(得分:2)
您的问题为何的答案如下:
你的变量都是真的。在按位比较中,true变为integer(1)(false变为0),返回包含所有匹配/相等位而不是布尔值的整数。
true => 1
1 & 1 === 1
单词结果:双方的位相等(1)。
101 & 110 === 100
用词:第一位不相等(从右到左),第二位不相等,第3位具有相等的位。
来自PHP.net:
$a & $b And Bits that are set in both $a and $b are set.
请参阅http://php.net/manual/en/language.operators.bitwise.php
比较位的结果是整数,位掩码及其比较掩码都不是布尔值。它们本质上是可变字节长度的(无符号)整数。
要澄清:
当我在var_dump中将它与按位运算符组合时,然后它 返回int(0)。为什么呢?
是完全错误的,它会返回int(1)
。
答案 2 :(得分:2)
&安培;是按位AND。假设你做了14& 7:
14 = 1110
7 = 0111
---------
14 & 7 = 0110 = 6
&安培;&安培;是合乎逻辑的。考虑一下这个真值表:
$bValue1 = true;
$bValue2 = true;
$bValue1 $bValue2 $bValue1 && $bValue2
false false false
false true false
true false false
true true true
&安培; =>执行按位AND操作。它只是在做基于的操作 位值。
&安培;&安培; =>做逻辑AND操作。这只是检查值 对或错。基于布尔值,它将评估表达式
答案 3 :(得分:1)
那是因为“按位”是指字节的数值。
你想要一个LOGICAL运算符:
var_dump($bValue1 && $bValue2);
答案 4 :(得分:0)
因为您应该在布尔值上使用逻辑运算符(&&,||,==)。按位运算整数。
答案 5 :(得分:0)
在&处使用AND你可以用&&还
$bValue1 = true;
$bValue2 = true;
var_dump($bValue1 & $bValue2);