繁体   English   中英

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

[英]Bit operations and the == vs != operator

我在做一些Leetcode问题,遇到一个奇怪的问题:

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

这行不通。 现在,如果不是比较是否等于一,而是在条件不同于0时执行条件,它将起作用。

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

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

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

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

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 :如果两者都不为假,则始终给出y

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

到底是什么假?

来自python官方文档:

可以测试任何对象的真值,以在if或while条件中使用,或用作以下布尔运算的操作数。 以下值为“假”:

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

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

现在什么是按位运算符?

按位运算符负责位操作和加法:

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

5 | 3 => 101 | 011 = 111,十进制为7

5&3 => 101&011 = 001即1

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM