我正在做一些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/)
答案 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终端中查看这些