首先了解一下n&(n-1)的作用:将n的二进制中最右边的1变为0。
举例:
n = 10010 (n - 1) = 10001
n & (n - 1) = 10000
利用这一特性,可以一下计算:
1、 求某一个数的二进制表示中1的个数
思路:有二进制中有多少个1,就需要将n的二进制中最右边的1变为0多少次
int count = 0;
while (n != 0) {
n &= (n-1);
count++;
}
2、 判断一个数是否是2的方幂
思路:是2的方幂的二进制的数的特点是只有最高位为1,其余的为0。用n & (n - 1)
将n的二进制中最右边的1变为0后n & (n - 1) == 0
if(n !=0 && n & (n - 1) == 0)