输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
想法1:输入一个int型整数,强转成unsigned int,将这个数%2,判断是否是1,计数,循环.
class Solution {
public:
int NumberOf1(int n) {
int num = 0;
int a = 0;
unsigned int b;
b = n;
while(b > 0){
a = b % 2;
b = b / 2;
if(a){
num ++;
}
}
return num;
}
};
想法2: 将这个数 -1 与齐本身按位取反.不等于一继续循环,计数.
public class Solution {
public int NumberOf1(int n) {
int count = 0;
while(n!= 0){
count++;
n = n & (n - 1);
}
return count;
}
}