参考:力扣 Krahets的解析
n-1 解析:二进制数字n最右边的1变为0,此1右边的0都变成1
n&(n-1) 解析:二进制数字n最右边的1变成0,其余不变。
1、二进制中的1的个数
int hammingWeight(int n)
{
res = 0;
while(n)
{
res += 1;
n &= (n-1);
}
return res;
}
2、2的幂
由此可以观察出 若满足n&(n-1) == 0,则是2的幂。
bool isPowerOfTwo(int n)
{
return n > 0 && n&(n-1) == 0;
}
补充:逐位判断(与运算)
若n&(n-1) = 0 则n二进制最右一位为0
若n&(n-1) = 1 则n二进制最左一位为1
<<=
左移并赋值,>>=
右移并赋值:
>> 右移 高位补 0,原数除以 2
<<
左移 末尾补 0,原数乘 2