python中的逻辑&运算符,它给出布尔值作为输出
python 243
原文标题 :Logical & operator in python which gives Boolean value as the output
我正在学习 Python 运算符,下面的代码片段留下了疑问。
到目前为止,我已经了解到:AND 运算符是一个逻辑运算符,如果两个操作数都为真,则返回True
。
& 运算符是位运算符,如果两个位都是 1,则返回1
,否则返回0
。
但是下面的代码片段有点令人困惑,因为它似乎检查了两个操作数是否为真,但如果是,它应该结果False
。
x = 4
y = -1
print("answer: ",x == y & x >=y)
输出:
answer: True
有人可以帮我理解代码。在此先感谢!
回复
我来回复-
Anshumaan Mishra 评论
我想是因为
&
运算符的优先级更高,所以y&x
先评估,然后yields4
。然后,这对两者都评估为 true 并返回 true:您的代码:
x = 4 y = -1 print("answer: ",x == y & x >=y) # becomes 4(x) == 4(x&y) >=-1(y), so it is True # The variable is in brackets after its value
输出:
answer: True
更改代码:
x = 4 y = -1 print(y&x) print("answer: ",(x == y) & (x >=y))# This should help
输出:
4 answer: False
2年前 -
Pranav Hosangadi 评论
您要查找的术语是运算符优先级。按位和发生在比较之前。
https://www.programiz.com/python-programming/precedence-associativity
您的表达式被评估为
x == (y & x) and (y & x) >= y
注意
&
运算符是按位与,而不是逻辑与。如果使用逻辑and
就不会遇到这个问题,因为比较先于逻辑操作2年前 -
Deepak Kumar 评论
目前您的代码首先计算 (y&x) 等于 4 然后这等于 x 也是 4。之后 4>=y 最终完成。这也是真的。这就是为什么你的输出是是的。尝试根据你的方法添加括号进行计算。像这里:而不是 x == y & x >=y ,这应该写成 (x == y) & (x >=y))。
2年前