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