题目描述
输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。
思路
定义一个flag,将其的二进制表示中1的位置从最低位开始向左移动,一直移动到最高位,每次都将flag与整数进行位移运算,这样能判断32位中都有哪一位是1,当flag左移到最高位后,flag会变成0,结束循环
代码
public int NumberOf1(int n) {
int count = 0;
if(n == 0){
return 0;
}
int flag = 1;
while(flag != 0){
if((flag & n) != 0){
count++;
}
flag = flag << 1;
System.out.println(flag);
}
return count;
}