布尔运算符的按位运算符

时间:2013-11-15 13:31:55

标签: php bitwise-operators

我对按位“&”有一个小问题PHP的comperator。 我试图比较两个布尔值,但当我比较它们时,按位比较器给我一个整数而不是布尔值。

如果它们有效,则检查两个变量。如果是,则函数返回,当然是真的。

$bValue1 = true;
$bValue2 = true;

当我在var_dump中将它与按位运算符组合时,它返回int(0)。为什么呢?

var_dump($bValue1 & $bValue2);

6 个答案:

答案 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);