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

有人可以帮我理解代码。在此先感谢!

原文链接:https://stackoverflow.com//questions/71477207/logical-operator-in-python-which-gives-boolean-value-as-the-output

回复

我来回复
  • Anshumaan Mishra的头像
    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年前 0条评论
  • Pranav Hosangadi的头像
    Pranav Hosangadi 评论

    您要查找的术语是运算符优先级。按位和发生在比较之前。

    https://www.programiz.com/python-programming/precedence-associativity

    您的表达式被评估为

    x == (y & x) and (y & x) >= y
    

    注意&运算符是按位与,而不是逻辑与。如果使用逻辑and就不会遇到这个问题,因为比较先于逻辑操作

    2年前 0条评论
  • Deepak Kumar的头像
    Deepak Kumar 评论

    目前您的代码首先计算 (y&x) 等于 4 然后这等于 x 也是 4。之后 4>=y 最终完成。这也是真的。这就是为什么你的输出是是的。尝试根据你的方法添加括号进行计算。像这里:而不是 x == y & x >=y ,这应该写成 (x == y) & (x >=y))。

    2年前 0条评论