求一个正整数的二进制数中1的个数

时间:2022-01-01 15:12:04
方法1:

判断这个是是不是奇数,如果是,计数+1,再把这个数右移1位。

循环的执行次数等于这个二进制数的长度。

long num1 = 259l;

int n1 = 0;
while (num1>0) {
n1 += num1&1;
num1>>=1;
}

方法二:

num&(num-1)和num相比,1的个数会少一个,再把num&(num-1)重新赋值给num,1的个数等于重新赋值的次数。
long num2 = 259l;
int n2 = 0;
int count2 = 0;
do {
count2++;
n2++;
} while ((num2 = (num2 & (num2-1))) > 0);