Write a function that takes an unsigned integer and returns the number of ’1' bits it has (also known as the Hamming weight).
For example, the 32-bit integer ’11' has binary representation 00000000000000000000000000001011, so the function should return 3.
常规思路,每次最低位与1,如果为1则右移一位,cnt++,如果n为0则while循环结束。参考讨论区大神的代码n = n&(n-1),每次会去掉一位1。
int hammingWeight(uint32_t n)
{
int cnt = 0;
while(n)
{
if(1 == (n&1))
{
cnt++;
}
n = n >> 1;
}
return cnt;
}
int hammingWeight(uint32_t n)
{
int res = 0;
while(n)
{
n &= n - 1;
++ res;
}
return res;
}