【问题标题】:Logical vs. bitwise operator AND逻辑与位运算符 AND
【发布时间】:2016-07-18 13:43:52
【问题描述】:

我不明白&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

【问题讨论】:

标签: python bitwise-operators logical-operators


【解决方案1】:

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

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

也许这看起来不直观,但& 确实是为了用于特定类型的计算的数字之间:

>>> 3 & 5
1

因此它与+* 等运算符具有相似的优先级,显然应该在== 之前对其进行评估。它根本不打算以与and 类似的方式使用。

【讨论】:

    【解决方案2】:

    问题是'&' 的优先级高于==。如果你把你的最后一条语句写成这样:

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

    你会得到你想要的结果。

    【讨论】:

      【解决方案3】:

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

      f == (1 & x) == 2
      

      1 & 2 为 0:

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

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

      1 == 0 == 2
      

      这是False

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-08-14
        • 1970-01-01
        • 2022-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多