lowbit(x)求法
0 & 0=0
0 & 1=0
1 & 0=0
1 & 1=1
x=x&(x-1)
将x的二进制值中,最后一个1置0,其它不变。即达到从x的尾部,删除一个1的效果。
二进制的减法规则中可以得知,在做x-1时,当把x写作
A1B
的形式,其中A为随意值,B为若干个0,可能为0个。
这时x-1的值,实际上是
A0C
的形式,其中A值不变,C为与B相同位数的1.
这样
x&(x-1)的结果,根据按位与的特性,当操作数一方为0时,结果为0,于是
x&(x-1) = A0B
对比x原始值A1B,x&(x-1)即把最后一个1改成0.
(x-1后再和x进行“与”运算,结果赋给x)
x&-x
-x是x取反加1
与x&之后只剩下当初最后位置上的1