1.lowbit:二进制最右侧第一个1的权重
return x & (-x)
解释:计算机中正整数以原码存储,比如12的原码为1100,
负数以补码存储,补码就是正数的反码+1,12的反码为0011,
-12的存储形式就位0100,于是12&(-12)=0100=4
2.将二进制,最右侧第一个1置0
return x & (x - 1)
解释:假设一个二进数x的最右边有5个0,即…100000,
则x-1的形式即为…011111,两数做&运算,即可将最右
侧第一个1置0。
1.lowbit:二进制最右侧第一个1的权重
return x & (-x)
解释:计算机中正整数以原码存储,比如12的原码为1100,
负数以补码存储,补码就是正数的反码+1,12的反码为0011,
-12的存储形式就位0100,于是12&(-12)=0100=4
2.将二进制,最右侧第一个1置0
return x & (x - 1)
解释:假设一个二进数x的最右边有5个0,即…100000,
则x-1的形式即为…011111,两数做&运算,即可将最右
侧第一个1置0。