做C++练习题学到的。
n & n - 1 统计二进制中1的个数,这里考虑负数的情况需要先将其转换为无符号整数
统计二进制0的个数,使用 n | n + 1
class Solution {
public:
int NumberOf1(int n) {
int res = 0;
// 将其转为无符号整数
unsigned int num = n;
while (num > 0) {
++res;
// 每次消除一个1
num = num & (num - 1);
}
return res;
}
};