位操作和== vs!=运算符

时间:2017-09-28 18:10:15

标签: python algorithm bitwise-operators

我正在做一些Leetcode问题而且我遇到了一个奇怪的问题:

for i in range(32):
        if(n&mask == 1):
            bits +=1
        mask <<=1
    return bits

这不起作用。现在,如果不是比较它是否等于1,那么当它与0不同时,它会起作用。

for i in range(32):
        if(n&mask != 0):
            bits +=1
        mask <<=1
    return bits

Aren他们以不同的方式做同样的事情?难道答案不一样吗?以下问题(https://leetcode.com/problems/number-of-1-bits/description/

2 个答案:

答案 0 :(得分:2)

不,他们和你发现的不一样。听起来很明显,==1检查值是否为1,!=0检查该值是否与0不同。您可能缺少的是1和0以外的值是可能的。

a&b返回按位和2个整数:1&1 == 1,但是2&2 == 2,因此2&2 != 0,但不是1。

答案 1 :(得分:0)

and , or , not& , | , !

之间存在差异

和,或者,不是逻辑运算符,& , | , !是按位运算符。

x or y:如果x为假,则为y,否则为x

x and y:如果x为false则为x,否则为y

not x:如果x为false,则为true,否则为false

快捷方式:

x and y:如果两者都不是假,则总是给出

x or y:如果两者都不为假,则总是给出

  

什么是假的?

来自python官方文档:

  

可以测试任何对象的真值,以便在if或while中使用   条件或下面的布尔运算的操作数。下列   值被视为错误:

     
      
  •   
  •   
  • 任何数字类型的零,例如,0,0L,0.0,0j。
  •   
  • 任何空序列,例如'',(),[]。
  •   
  • 任何空映射,例如{}。
  •   
  • 用户定义类的实例,如果类定义非零()或 len ()方法,则该方法返回整数零或bool值False。 2.5
  •   
  • 所有其他值都被视为true - 因此许多类型的对象始终为真。
  •   

除非另有说明,否则具有布尔结果的操作和内置函数总是返回0或False表示false,1或True表示true。 (重要的例外:布尔运算“或”和“和”总是返回其中一个操作数。)

现在什么是按位运算符?

按位运算符处理位操作和加法:

|运算符不是加法(它在真值表上执行加法基础) &安培;运算符不是乘法(它在真值表上执行乘法基础)

5 | 3 =&gt; 101 | 011 = 111,十进制为7

5&amp; 3 =&gt; 101&amp; 011 = 001,即1

您可以在python终端中查看这些