给定一个int 数字,要求计算出int数字对应的二进制中1的个数
最简单的一个个位数判断
public int count(int n){
int count = 0;
while(n != 0){
count += n & 1;
n >>>= 1;
}
return count;
} 换一种思维,每次都获取到一个1然后删去
public int count(int n){
int count = 0;
while(n != 0){
n = n & (n-1);
count++;
}
return count;
} 原理:每次-1会将这个数改变得到一个新的数:右边第一个1右边的0变为1,然后右边第一个的1变0。
将这个新得到数和原本的数相与就能将右边第一个1变0
例子: n = 100100
则 n - 1 = 100011
二者相与得到 100000
然后 count++ 成功统计到一个1
直到全为 0 停止
int countBit(int n ) {
// write code here
int count = 0;
while(n)
{
count += n & 1;
n >>= 1;
}
return count;
}