Python 中按位与和逻辑与以及相等运算符的行为 3
Behaviour of bitwise AND and logical AND along with equality operator in Python 3
所以我明白按位 AND 使用起来并不总是安全的,尤其是当操作数是数字时。但是我试图理解这个声明 returns 到 False.
背后的微妙原因是什么
1110010110001000 == 1110010110001000 & 1 == 1 & 1000001000001101 == 1000001000001101 & 1 == 1
--> 错误
然而,当我使用逻辑 AND 运算符时,它 returns True 相当冗长和清晰,但试图理解为什么第一个语句 returns False。
和 1110010110001000 == 1110010110001000 and 1 == 1 and 1000001000001101 == 1000001000001101 and 1 == 1
--> 正确
PS: 在我的搜索中找不到任何类似的 QA。
根据 operator precedence,按位和 &
的绑定比 ==
强,后者又比逻辑 and
强。因此,您的代码如下所示:
1110010110001000 == (1110010110001000 & 1) == (1 & 1000001000001101) == (1000001000001101 & 1) == 1
(1110010110001000 == 1110010110001000) and (1 == 1) and (1000001000001101 == 1000001000001101) and (1 == 1)
&
的 precedence 高于 ==
。
所以这个:
1110010110001000 == 1110010110001000 & 1 == 1 & 1000001000001101 == 1000001000001101 & 1 == 1
表示
1110010110001000 == (1110010110001000 & 1) == (1 & 1000001000001101) == (1000001000001101 & 1) == 1
这意味着
1110010110001000 == 0 == 1 == 1 == 1
这意味着(由于 operator chaining)
(1110010110001000 == 0) and (0 == 1) and (1 == 1) and (1 == 1)
这是错误的。
总而言之,不要用&
来表示合乎逻辑的and
。
所以我明白按位 AND 使用起来并不总是安全的,尤其是当操作数是数字时。但是我试图理解这个声明 returns 到 False.
背后的微妙原因是什么1110010110001000 == 1110010110001000 & 1 == 1 & 1000001000001101 == 1000001000001101 & 1 == 1
--> 错误
然而,当我使用逻辑 AND 运算符时,它 returns True 相当冗长和清晰,但试图理解为什么第一个语句 returns False。
和 1110010110001000 == 1110010110001000 and 1 == 1 and 1000001000001101 == 1000001000001101 and 1 == 1
--> 正确
PS: 在我的搜索中找不到任何类似的 QA。
根据 operator precedence,按位和 &
的绑定比 ==
强,后者又比逻辑 and
强。因此,您的代码如下所示:
1110010110001000 == (1110010110001000 & 1) == (1 & 1000001000001101) == (1000001000001101 & 1) == 1
(1110010110001000 == 1110010110001000) and (1 == 1) and (1000001000001101 == 1000001000001101) and (1 == 1)
&
的 precedence 高于 ==
。
所以这个:
1110010110001000 == 1110010110001000 & 1 == 1 & 1000001000001101 == 1000001000001101 & 1 == 1
表示
1110010110001000 == (1110010110001000 & 1) == (1 & 1000001000001101) == (1000001000001101 & 1) == 1
这意味着
1110010110001000 == 0 == 1 == 1 == 1
这意味着(由于 operator chaining)
(1110010110001000 == 0) and (0 == 1) and (1 == 1) and (1 == 1)
这是错误的。
总而言之,不要用&
来表示合乎逻辑的and
。