计算机中的补数是,两个数加起来等于在二进制里一个非常整的数,比如,加起来等于
10000000000000000000000000000000000这样的。
1(01)的补数
11111111111111111111111111111111111111
2(10)的补数
11111111111111111111111111111111111110
3(11)的补数
11111111111111111111111111111111111101
负数在计算机中,用其绝对值的补数来表示它
-3在计算机中表示为(即3的补数)
11111111111111111111111111111111111101
class Solution {
public:
int NumberOf1(int _n) {
unsigned int n = _n;
int s = 0;
while (n) s += n & 1, n >>= 1;
return s;
}
};
如果是负数(有符号整数),在右移时高位补1,上述程序中的while(n)会陷入死循环,所以要将n转换为无符号整数(数值不变,仅改变解释规则)