这道题考察的主要是二进制的位运算,需要注意的是有符号数的判断。
解题细节参考剑指offer.
普通解法:对1左移并于n取与来判断此位是否为1
时间和内存消耗以及源代码如下:
int hammingWeight(uint32_t n) {
int counts = 0;
unsigned int sign = 1;
while (sign)
{
if (n&sign)
{
counts++;
}
sign = sign << 1;
}
return counts;
}
高级解法:对n和(n-1)取与来将n的最低位1去除。
时间和内存消耗以及源代码如下:
int hammingWeight(uint32_t n) {
int counts = 0;
while (n)
{
counts++;
n = (n-1) & n;
}
return counts;
}