给定一个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; }