题目链接:. - 力扣(LeetCode)
知识点:位运算
解法一:移位&
把每一位都与其位对应置上为1,其他位置为0的32位数字进行&运算,循环32位后,结束运算
int hammingWeight(uint32_t n) {
int res = 0, i = 0;
while(i < 32)
{
//res += n & (1 << i);错误思想
if(n & (1 << i)) res++;
i++;
}
return res;
}
解法二:
常用的位运算,很多时候,感觉某些问题无法解决的时候,可以考虑位运算
位运算确实很神奇,n&(n-1)每次都会把n最后一位为1的变为0,比如7=(0111) 7-1=(0110), 7&(7-1) = (0110), 6&(6-1) = (0100),直到n为0,结束运算。
class Solution {
public:
int hammingWeight(uint32_t n) {
int res = 0;
while(n != 0)
{
n = n & (n - 1);
res++;
}
return res;
}
};