如果一个二进制串最后一位是1,那么它右移1位再左移1位就会丢掉这个1,对应的数值也就会小1,那么就可以通过判断移位前后数值是否不变,来判断当前是否丢掉了1个1,如果丢掉了,计数器就+1,然后n右移1位,否则就直接右移,直到n变为0。
int hammingWeight(uint32_t n) {
int count = 0;
while (n != 0)
{
if (n >> 1 << 1 != n)
++count;
n >>= 1;
}
return count;
}