题目:
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变为0,而这个1之后的0都变为1,再和原整数做与操作会使原整数最右边一个1消除,一个整数的二进制表示中有多少个1就可以进行多少次这样的操作:
例如:n=12,二进制为1100,减去1后变为1011,1100&1011=1000,n中1的个数减去1,我们计数1
class Solution {
public:
int hammingWeight(uint32_t n) {
//一个整数减去1再和原整数做与操作,会把该整数最右边一个1变为0,而这个1之后的0都变为1,一个整数的二进制表示
//中有多少个1就可以进行多少次这样的操作
int count = 0;//统计1的个数
while(n)//当n不为0时,至少有一位是1
{
++count;
n = (n-1)&n;//n减去1再和n做“与”位运算,此时n中的1的个数减去1
//例如:n=12,二进制为1100,减去1后变为1001,1100&1001=1000,n中1的个数减去1,我们计数1
}
return count;//返回1的个数
}
};