题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
参考代码
class Solution {
public:
int NumberOf1(int n) {
int numOf1 = 0;
int mask = 1;
while(mask != 0){
if( n & mask) // 不能写 n & mask != 0
numOf1++;
mask = mask << 1;
}
return numOf1;
}
};
此题注意负数用补码表示,负数的二进制补码的最高位为1。
拓展解法
(x-1)&x 相当于把整数的二进制表示中的最右边的1变为0。
相关题目
- 一句话判断某个整数是不是2的整数次方。
- 两个整数m,n,计算需要改变m中的多少位才能得到n。