一般的做法是 用 n&1 然后右移一位 这样便可以获得结果
int hammingWeight(uint32_t n) {
int res=0;
while(n){
if(n&1)
res++;
n=n>>1;
}
return res;
}
但是今天看到一个解决方案挺快的 用 n&(n-1)
用 n&(n-1)可以去掉n后面的 从第一个1开始加上后面所有的0
int hammingWeight(uint32_t n) {
int res=0;
while(n){
res++;
n&=(n-1);
}
return res;
}
1);
}
return res;
}