n&(n-1)作用:将n的二进制表示中的最低位为1的改为0,原理:
假设最右边1 位于第m位,那么n-1时,第m位变为0,第m位之后的所有0都变为1,此时,n&(n-1)就把第m位为0给去掉,也就是将n的最低位为1变为0.
先看一个简单的例子:
n = 10100(二进制),则(n-1) = 10011 ==》n&(n-1) = 10000
可以看到原本最低位为1的那位变为0。
弄明白了n&(n-1)的作用,那它有哪些应用?
求某一个数的二进制表示中1的个数
while (n >0 ) {
count ++;
n &= (n-1);
}判断一个数是否是2的方幂
n > 0 && ((n & (n - 1)) == 0 )
/n&(n-1)的作用为:在二进制表示中,将n中最低位为1的变为0,而2的幂必须是二进制中只有最高位为1,其他均为0才行,所以与n-1相与,则把最高位的1给抹掉了,就只能为0