方法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);