[英]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
評估為真,所以你得到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
==
優先順序是從右(更高)開始,它將在&
之前進行評估
&用於位操作和==進行比較所以要小心......這是一個例子:
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
}
&是php中的按位運算符,==測試相等性。
由於優先級,請參見http://php.net/manual/en/language.operators.precedence.php ,其中==高於&,您的測試與10&(10 == 10)相同
10 == 10將返回布爾值true(與二進制中的1相同)
現在我們留下10&true,與10&1相同
按位運算符&,查看2個值的每個位,並將結果中的相應位設置為1,如果它們都是1和0,否則,例如:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.