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