方法一:将1左移i次,与n按位与,如果结果不为0,说明该位是1,遍历32位
class Solution {
public:
int hammingWeight(uint32_t n) {
int res=0;
for(int i=0;i<32;i++){
if(n&(1<<i))
res++;
}
return res;
}
};
方法二:n与n-1按位与,按二进制来说只变化了1位,所以按位与以后保留1的位数,执行了x次n=0,则n一共有x个1。
class Solution {
public:
int hammingWeight(uint32_t n) {
int res=0;
while(n){
n=n&(n-1);
res++;
}
return res;
}
};