n 的二进制表示第 k 位是几

1. 先把第 k 位移到最后一位 n >> k
2. 看个位是几 x & 1

1.2. 结合一下 n >> & 1
看一下 n 的二进制第 k 位是几

lowbit (x) 返回 x 的最后一位
x = 1010 lowbit (x) = 10
x = 101000 lowbit(x) = 1000

  x & -x = x & (~x + 1)
  x = 1010...100...0
  ~x= 0101...011...1

最后一位 1 的位置变成 0 之后全变 1
~x+1= 0101...100...0
取反 + 1 即最后一位 0 的位置变成 1
x&(~x+1)= 0000...100...0
x&(~x+1) 应该是最后 x 一位 1 接下来全是 0

n的二进制表示第k位是几

1.先把第k位移到最后一位 n >> k
2.看个位是几 x & 1

1.2.结合一下 n >> & 1
看一下n的二进制第k位是几

lowbit(x) 返回x的最后一位
x = 1010 lowbit(x) = 10
x = 101000 lowbit(x) = 1000

      x & -x = x & (~x + 1)
      x = 1010...100...0
      ~x= 0101...011...1
最后一位1的位置变成0之后全变1
    ~x+1= 0101...100...0
取反+1即最后一位0的位置变成1
x&(~x+1)= 0000...100...0
x&(~x+1)应该是最后x一位1接下来全是0