所有数在内存中都是以二进制形式存储的
常用位运算操作
- X&1 == 1 or == 0 判断奇偶(x % 2 == 1)
- x = x & (x-1) 清零最低位的1
- x & -x(取反再+1)得到最低位的1
- 将x最右边的n位清零 x&(~0<<n)
- 获取x的第n位值 (x>>n)&1
- 获取x的第n位的幂值 x&(1 << (n-1))
- 仅将第n位置为1 x|(1 << n)
- 仅将第n为置为0 x&(~(1<<n))
- 将x最高位至第n位(含)清零 x&((1<<n)-1)
- 将第n为至第0位(含)清零 x&(~((1<<(n+1))-1))
1 位1的个数(leetcode 191)
#method1 模2
#method2 x=x&(x-1)
def hammingWeight(self, n):
rst = 0
mask = 1
for i in range(32):
if n & mask:
rst += 1
mask = mask << 1
return rst
def hammingWeight(self, n):
rst = 0
while n != 0:
rst += 1
n = n & (n-1)
return rst
2 power of two(leetcode 231)
#method1 模2
#method2
x != 0 and x & (x-1) == 0
网友评论