把一个整数减1,那么该整数二进制表示中就是把最右边的1变成0,,如果右边还有0则都变成1,它左边所有位都保持不变,接下来我们把一个整数和它减去1的结果做与运算,就相当于把它最右边的1变成0.
class Solution {
public:
int NumberOf1(int n) {
int count = 0;
while (n) {
count++;
n = (n - 1) & n;
}
return count;
}
};
测试用例:
正数(1,0x7FFFFFFF)
负数(0x80000000,0xFFFFFFF)
0