在php中,为什么10&;10==10返回0?

在php中,为什么10&;10==10返回0?,php,operators,Php,Operators,我正在搞乱PHP操作符,我不明白为什么 10 & 10 == 10 返回0。 这应该比较10和10,这是正确的吗?因为=操作符在&操作符之前被解析,因为解析器判断它更重要。但您可以用括号覆盖默认的运算符求值顺序: (10 & 10) == 10 比较运算符比按位运算符具有更高的精度,因此表达式的计算公式为: 10 & (10 == 10) 10==10的计算结果为true,因此得到10&true 按位&将真值转换为1,因此得到10&1,即0 注意,由于11&1=

我正在搞乱PHP操作符,我不明白为什么

10 & 10 == 10
返回0。
这应该比较10和10,这是正确的吗?

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

(10 & 10) == 10

比较运算符比按位运算符具有更高的精度,因此表达式的计算公式为:

10 & (10 == 10)

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


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



注意,由于
11&1===1

表达式与:

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

=
的优先级是从右(更高)开始的,它将在
&

用于位操作和==用于比较之前进行计算,因此请小心。。。 以下是一个例子:

echo((10 & 12));

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

如果10与10相同,您是否进行比较

IF (10 == 10) {
     // condition code
}
或者10和10都是真的

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

&是php中的按位运算符,并且==测试是否相等

由于of==的优先级(请参见)高于&,因此您的测试与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

关联性
(10&10)==10
?返回者无任何内容,无效php@elclanrs实际上,在PHP中,感谢您的支持answer@TiLoup这个答案其实是不正确的。这是对的。