逻辑与按位运算符AND

时间:2016-03-30 13:47:08

标签: python bitwise-operators logical-operators

我不理解&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

3 个答案:

答案 0 :(得分:6)

问题在于&的运算符优先级高于==

>>> (f == 1) & (x == 2)
True
>>> f == (1 & x) == 2
False

也许这似乎不直观,但&真正意味着在数字之间用于特定类型的计算:

>>> 3 & 5
1

所以它与+*之类的运算符具有相似的优先级,明智地应该在==之前进行评估。它并不意味着以与and类似的方式使用。

答案 1 :(得分:1)

问题在于'&'优先级高于==。如果你把你的最后一句话写成:

(f==1) & (x==2)

您将获得所需的结果。

答案 2 :(得分:1)

在第二种情况下,您的代码是:

f == (1 & x) == 2

1 & 2为0:

00000001
00000010 &
--------
00000000

所以你的最后陈述看起来是:

1 == 0 == 2

哪个是False