我在摆弄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