在php中,为什么会出现10&;10==10返回0


In php why is it the case that 10 & 10 == 10 returns 0?

我在摆弄PHP运算符,我不明白为什么

10 & 10 == 10

返回0。这应该比较10和10,这是真的吗?

比较运算符的优先级高于逐位运算符,因此表达式的求值为:

10 & (10 == 10)


10 == 10的计算结果为true,因此得到10 & true

按位&true转换为1,因此得到10 & 1,即0


请注意,11 & 10 == 10导致1,因为11 & 1 === 1

因为==操作符在&操作符之前被解析,因为它被解析器判断为更重要。但您可以用括号覆盖默认的操作员评估顺序:

(10 & 10) == 10

您的表达式类似于:

( 10 & 10 == 10 ) = ( 10 & (10 == 10) ) = ( 10 & (true) ) = 0

==的优先级从右起(较高(,它将在& 之前进行评估

amp;用于位运算,==用于比较,所以要小心。。。这里有一个例子:

echo((10 & 12));

打印8是因为10=00001010和12=00001100和00001010&00001100=00001000=8

您是否在比较10是否与10相同?

IF (10 == 10) {
     // condition code
}

或者10和10都是真正的

IF (10 && 10) {
    // condition code
}

amp;是php中的位运算符,==测试相等性。

由于优先级,请参见http://php.net/manual/en/language.operators.precedence.php,的值高于&,你的测试与10&(10==10(

10==10将返回布尔值true(与二进制中的1相同(

现在我们只剩下10&true,这与10&1

逐位运算符&,查看2个值中的每个位,如果它们都是1和0,则将结果中的相应位设置为1,否则,例如:

5 (101) & 3 (011) = 1 (001)
5 (101) & 2 (010) = 0 (000)
6 (110) & 4 (100) = 4 (100)

因此,10(1010(&1(0001(=0(0000(,因此10&10==10等于0!

如果您只想将10与10进行比较,则使用10==10