题目描述
方法一:与 1 按位与
思路
将 n 和 1 作按位与操作,若结果是 1,则说明 n 对应的二进制最后一位是 1,计数器加一。没判断完一位,就将 n 右移一位,直至 n 为 0。
代码
class Solution {
public:
int hammingWeight(uint32_t n) {
int cnt = 0;
while (n) {
cnt += n & 1;
n = n >> 1;
}
return cnt;
}
};
方法二:与 n - 1 按位与
思路
此方法有一个技巧:n 和 n-1 作按位与操作可以将 n 对应的二进制的最后一个 1 去除。循环进行上述操作,直至 n 为 0。
代码
class Solution {
public:
int hammingWeight(uint32_t n) {
int cnt = 0;
while (n) {
++cnt;
n &= n - 1;
}
return cnt;
}
};