题目
给定一个32位整数n,可为0,可为正,也可为负,返回该整数二进制表达中1的个数。
代码实现
//整数n每次进行无符号右移一位,检查最右边的bit是否为1来进行统计
public int count1(int n) {
int res = 0;
while (n != 0) {
res += n & 1;
n >>>= 1;
}
return res;
}
//n &= (n - 1)操作实质是抹掉最右边的1,因此循环次数只与1的个数有关
public int count2(int n) {
int res = 0;
while (n != 0) {
n &= (n - 1);
res++;
}
return res;
}