一、题目
请实现一个函数,输入一个整数,输出这个数的二进制表示中1的个数。
二、大致思路
n & (n - 1)
每次计算都会消除最后一位1。用这样来计算就可以确定有多少个1.
n : 10110100
n - 1 : 10110011
n&(n-1) : 10110000
时间复杂度:O(M),其中M表示1的个数
三、代码实现
public int byteCompute1(int n){
int count=0;
while(n!=0){//由于每次n和n-1相与都会导致,n的最右边的为1的元素变成0,因此总共要循环的次数就是1的个数次。
count++;
n=(n-1)&n;
}
return count;
}