输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
1、暴力计数(循环次数等于n的二进制长度,如n=257循环9次)
class Solution {
public:
int NumberOf1(int n) {
for(unsigned int r = 0, m = n; ; r += m & 1, m >>= 1)
if(m == 0)
return r;
}
};
2、利用lowbit优化(循环的次数等于n的二进制中1的个数,如n=257循环2次)
class Solution {
public:
int NumberOf1(int n) {
for(unsigned int r = 0, m = n; ; ++r, m -= m & -m)
if(m == 0)
return r;
}
};