题目:实现一个函数,输入一个整数,输出该数二进制表示中1的个数。
思路1:Java支持对整型变量直接进行位运算。可将整数的二进制表示中的各位与1进行位与,从而计算该数二进制表示中1的个数。
代码(已在牛客网AC):
public int NumberOf1(int n) {
int count = 0;
int flag = 1;
// flag和n都为int,因此flag!=0的循环条件可保证n的所有二进制位都被检查
while(flag != 0)
{
if((n & flag) != 0)
count++;
flag = flag << 1;
}
return count;
}
思路2:通过举例可以发现,将整数减1得到的结果再和该整数进行位与,可以将原整数二进制表示中的最右边的1变为0,因此原整数能进行多少次这样的操作,其二进制表示中就有多少个1。
代码(已在牛客网AC):
public int NumberOf1(int n) {
int count = 0;
while(n != 0)
{
count++;
n = (n-1) & n;
}
return count;
}