int lowbit(int x)
{
return x&(-x);
}
lowbit(x) 即是求2^p(p表示x的二进制中从右到左第一个1的后面有几个0)
例如lowbit(1):
1的二进制是0000 0001
-1的二进制是1111 1111(先改符号位,再按位取反,符号位不变,最后末位加一)
1&(-1) 0000 0001
& 1111 1111
-----------------------------
0000 0001
所以lowbit(1)=1 (即2^0,第一个1后面有0个0)