逻辑运算符与位运算符AND的区别

3

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

你应该阅读这篇文章 https://dev59.com/3W865IYBdhLWcg3wYNfj#3845032 - Milor123
4个回答

6
问题在于&的运算优先级高于==
>>> (f == 1) & (x == 2)
True
>>> f == (1 & x) == 2
False

也许这看起来有些不合常理,但是&在特定的计算中确实应该被用于数字之间:
>>> 3 & 5
1

因此,它的优先级类似于像+*这样的运算符,这些运算符在==之前应该被合理地评估。它并不像and一样被用于类似的方式。


1
问题在于'&'的优先级高于==。如果你把最后一条语句写成这样:
(f==1) & (x==2)

您将获得您期望的结果。


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


f == (1 & x) == 2

1 & 2 is 0:

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

所以你的最终陈述如下:

1 == 0 == 2

哪个是 False


0

逻辑与 (and) 会给你一个真或假的答案 (布尔值),而按位与 (&) 运算符会将数字转换为二进制并在数字上应用真值表,然后给你一个数字答案。


1
你的回答可以通过添加更多支持信息来改进。请[编辑]以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是否正确。您可以在帮助中心中找到有关如何撰写良好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接