基本套路

  1. 判断奇偶性: X & 1 == 1 => 奇数,== 0 => 偶数
  2. 把最低位的 1 清 0 => X = X & (X-1)
  3. 得到最低位的 1 比如 1100 返回 100 => X & -X
  4. 把 X 最右边的 n 位清 0 => 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 位(含)清 0 => X & ((1 << n) - 1)
  10. 将第 n 位至第 0 位(含)清 0 => X & (~((1 << (n + 1)) - 1))

异或

X ^ 0 = X X ^ 1(全 1) = ~X(取反),1(全 1)= ~0 X ^ (~X) = 1(全 1) X ^ X = 0 a ^ b = c => a ^ c = b, b ^ c = a a ^ b ^ c = a ^ (b ^ c) = (a ^ b) ^ c

统计二进制表示中末尾 0 的个数

以下图为例:01101000 返回 3。

方法一:按位取

while((x & (1<<count)) == 0) 
count += 1;

方法二:找到 1000(二进制表示),取 log2

x = x & (-x) // -x在计算机中以补码表示,下图中的-X+1
log2(x)

方法三: