一、题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
二、分析
该题舍弃直接对输入数进行操作,因为考虑到负数移位存在符号位的问题,转而采取对数字1进行左移位操作,然后和输入数进行与操作,若与结果不为0,则该位上为1,计数器++,循环结束条件是1左移位之后等于0。
三、代码:
int NumberOf1(int n) {
int count = 0;
while(n!=0){
count+=(n&1); //每次判断最低位是否为1
n>>>= 1;
}
return count;
}