1

所以我理解按位与并不总是可以安全使用,特别是如果操作数是数字的话。但是我试图理解这个陈述背后的那个微小的微妙原因返回 False 是什么。

1110010110001000 == 1110010110001000 & 1 == 1 & 1000001000001101 == 1000001000001101 & 1 == 1--> 错误

但是,当我使用逻辑 AND 运算符时,它返回 True,这相当冗长和清晰,但试图理解为什么第一条语句返回 False。

1110010110001000 == 1110010110001000 and 1 == 1 and 1000001000001101 == 1000001000001101 and 1 == 1--> 真

PS:在我的搜索中找不到任何类似的 QA。

4

2 回答 2

2

根据运算符优先级,按位和&绑定比==哪个强,而后者又比逻辑绑定强and。因此,您的代码如下所示:

1110010110001000 == (1110010110001000 & 1) == (1 & 1000001000001101) == (1000001000001101 & 1) == 1
(1110010110001000 == 1110010110001000) and (1 == 1) and (1000001000001101 == 1000001000001101) and (1 == 1)
于 2021-09-23T14:13:52.620 回答
2

&优先级高于==

所以这:

1110010110001000 == 1110010110001000 & 1 == 1 & 1000001000001101 == 1000001000001101 & 1 == 1

方法

1110010110001000 == (1110010110001000 & 1) == (1 & 1000001000001101) == (1000001000001101 & 1) == 1

意思是

1110010110001000 == 0 == 1 == 1 == 1

这意味着(由于运算符链接

(1110010110001000 == 0) and (0 == 1) and (1 == 1) and (1 == 1)

这是错误的。

总之,不要用&to 表示逻辑and

于 2021-09-23T14:14:45.560 回答