我正在做一些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他们不是在用不同的方式做同样的事情吗?答案不应该是一样的吗?以下(https://leetcode.com/problems/number-of-1-bits/description/)中的问题
发布于 2017-09-29 02:14:37
不,正如你所发现的,它们是不一样的。听起来很明显,==1检查该值是否为1,!=0检查该值是否与0不同。您可能遗漏的是1和0以外的值是可能的。
a&b返回2个整数的按位and:1&1 == 1,但2&2 == 2,因此2&2 != 0,但不是1。
发布于 2017-09-29 02:47:06
and , or , not和& , | , !是有区别的
and、or、not是逻辑运算符,& , | , !是按位运算符。
x or y:如果x为false,则为y,否则为x
x and y:如果x为false,则x为false,否则为y
not x:如果x为false,则为true,否则为false
快捷方式:
x and y:如果两者都不是false,则始终提供y
x or y:如果x和x都不为false,则始终提供x
什么是真正的false?
来自python官方文档:
任何对象都可以测试真值,以便在if或while条件中使用,或者用作下面的布尔运算的操作数。以下值被认为是假的:
任何数值类型的非零值,例如,0,0L,0.0,0j。
()方法,当该方法返回整数0或布尔值False.2.5
除非另有说明,否则具有布尔值结果的操作和内置函数总是返回0或False表示false,返回1或true表示True。(重要的例外:布尔运算"or“和" and”总是返回它们的一个操作数。)
那么什么是按位运算符呢?
按位运算符处理位操作和加法:
|运算符不是加法(对真值表进行加法运算)和运算符不是乘法(对真值表进行乘法运算)
5|3 => 101 | 011 = 111,十进制数为7
5&3 => 101 & 011 = 001,等于1
您可以在python终端中查看这些内容
https://stackoverflow.com/questions/46475735
复制相似问题