题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
题目类别
二进制计算
解题思路
代码鲁棒性;输入是int 可能正数,负数,零;
首先思路是n & 1,然后按位右移n,但是n可能为负数就造成死循环
其次思路是,每次左移1,在分别与n作与运算,但是int为32位因此要判断32次
最后采用(n+1)& n 的方式,每次去掉最右边1.达到循环1个数次运算
具体实现
class Solution {
public:
int NumberOf1(int n) {
int count = 0;
while(n){
count++;
n = ( n-1 ) & n;
}
return count;
}
};