1.lowbit(x)
实现:
int lowbit(int x)
{
return x & -x;
}
这个函数用来求数中二进制位中最低位的1(完整求法:log2(lowbit(x))),需要注意的是,答案的范围是0~30,因为31位是符号位,求出来的值为负数,原因如下:
设x = 0x8000 0000,那么设res = lowbit(x) = 0x8000 0000,这样如果res为int, 那么res为一负数,log2(res)的操作即为非法的,通过将res声明为unsigned int即可解决该问题。
2. 清除最低位的1
n &= (n -1) ; // 清除最低位的1
因为n最右侧连续的0,在n-1中为连续的1,n最右侧的1,在n-1中为最右侧的0。