题目:请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。
例: 9的二进制表示为1001,有2位是1
解法一:思路:用1从右到左比对二进制上的每一位,&运算为1的做计数。
public static int oneNum(int num){
int count=0;
for (int j = 1; j <=32; j++) {
if ((num&(1<<j))==(1<<j)){
count++;
}
}
return count;
}
解法二:将数值减一,再与减一前的数值进行&运算,&运算的次数进行计数,即为1的个数:
public static int oneNum(int num){
int count=0;
while (num!=0){
num=((num-1)&num);
count++;
}
return count;
}