按位运算产生意想不到的结果

Nom*_*ku 0 python bitwise-operators

我试图理解逻辑操作数and和按位操作数之间的区别&。于是我写了两条语句,得到了意想不到的结果。我理解第一个,并希望第二个会给我与第一个相同的结果。

  1. 第一个我得到 False 这正是我想要的。但是第二个我得到了 True 这让我感到困惑。

  2. 既然3%3 == 0归来True,又3%5 == 0归来False。并True & False给我False。为什么,当我把它们放在一起时,我得到了True?有人可以解释为什么第二个给我True而不是False吗?

    3 % 3 == 0 and 3 % 5 == 0
    3 % 3 == 0 & 3 % 5 ==0 
    3 % 3 == 0
    3 % 5 == 0
    True & False
    
    Run Code Online (Sandbox Code Playgroud)

Pac*_*ac0 5

运营商优先权可能是这里混乱的根源。

&具有比更高的优先级==,而and具有更低的优先级。

这意味着第二种情况与 3 % 3 == (0 & 3 % 5) == 0

如果添加更多括号来显示顺序,则这些是等效的:

(3 % 3) == (0 & (3 % 5)) == 0
0 == (0 & 3) == 0
0 == 0 == 0  // True
Run Code Online (Sandbox Code Playgroud)

注意:最后一个链==被解释为所有三个操作数之间的相等性测试,在这里显然是正确的。感谢@kaya 的澄清评论。