二进制中1的个数
题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
实现思路
由于数字在计算机中存储的形式就是二进制,因此可以直接将数字与1相与来判断二进制形式下最低位是否为1,然后右移数字继续判断直到数字为0即可。
但是还要考虑负数形式,由于负数在存储时,最高位有一符号位,在右移过程中最高位会不断补1,所以会进入死循环。因此我们可以将任何负数与7FFFFFFF相与,这样子就可以去除掉最高位的1,使负数转换为正数,然后在计数器上多加一次1即可。
具体实现
class Solution {
public:
int NumberOf1(int n) {
int count=0;
if(n<0){
n = n & 0x7fffffff;
count++;
}
while(n!=0){
if(n&1) count++;
n=n>>1;
}
return count;
}
};