n&(n-1)
将n的二进制表示中的最低位为1的改为0,例如:
n = 100100
n-1 = 100011
n&(n-1) = 100000
应用1:求某一个数的二进制表示中1的个数
while(n > 0)
{
cnt++;
n&=(n-1);
}
应用2:判断一个数是否是2的次幂
n > 0 && ((n & (n - 1)) == 0 )
将n的二进制表示中的最低位为1的改为0,例如:
n = 100100
n-1 = 100011
n&(n-1) = 100000
while(n > 0)
{
cnt++;
n&=(n-1);
}
n > 0 && ((n & (n - 1)) == 0 )