输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
用1和n进行位与运算
n的最右边那位如果是1,1的个数就加1
因为负数右移时,在最高位补得是1
该解法如果输入时负数会陷入死循环
所以我们使用下面的算法:
用1(1自身左移运算,其实后来就不是1了)和n的每位进行位与,来判断1的个数
public class Solution {
public int NumberOf1(int n) {
int count = 0;
int flag = 1;
while(flag != 0) {
if((n & flag) != 0) {
count++;
}
flag = flag << 1;
}
return count;
}
}