[英]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.