【问题标题】:Logical vs. bitwise operator AND逻辑与位运算符 AND
【发布时间】:2016-07-18 13:43:52
【问题描述】:
我不明白& 和and 之间的区别,即使我阅读了一些关于它的其他问题。
我的代码是:
f=1
x=1
f==1 & x==1
Out[60]: True
f==1 and x==1
Out[61]: True
f=1
x=2
f==1 and x==2
Out[64]: True
f==1 & x==2
Out[65]: False
为什么是第二个&False,而第一个是True?
【问题讨论】:
标签:
python
bitwise-operators
logical-operators
【解决方案1】:
问题在于& 的运算符优先级高于==。
>>> (f == 1) & (x == 2)
True
>>> f == (1 & x) == 2
False
也许这看起来不直观,但& 确实是为了用于特定类型的计算的数字之间:
>>> 3 & 5
1
因此它与+ 和* 等运算符具有相似的优先级,显然应该在== 之前对其进行评估。它根本不打算以与and 类似的方式使用。
【解决方案2】:
问题是'&' 的优先级高于==。如果你把你的最后一条语句写成这样:
(f==1) & (x==2)
你会得到你想要的结果。
【解决方案3】:
在第二种情况下,您的代码是:
f == (1 & x) == 2
1 & 2 为 0:
00000001
00000010 &
--------
00000000
所以你的最后陈述看起来:
1 == 0 == 2
这是False。