a 位运算

2019-06-06  本文已影响0人  cookyo

所有数在内存中都是以二进制形式存储的

常用位运算操作

  1. X&1 == 1 or == 0 判断奇偶(x % 2 == 1)
  2. x = x & (x-1) 清零最低位的1
  3. x & -x(取反再+1)得到最低位的1
  4. 将x最右边的n位清零 x&(~0<<n)
  5. 获取x的第n位值 (x>>n)&1
  6. 获取x的第n位的幂值 x&(1 << (n-1))
  7. 仅将第n位置为1 x|(1 << n)
  8. 仅将第n为置为0 x&(~(1<<n))
  9. 将x最高位至第n位(含)清零 x&((1<<n)-1)
  10. 将第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
上一篇 下一篇

猜你喜欢

热点阅读