方法一、使用按位与操作符
我们知道按位与操作符(&)的作用是对两个数的二进制位进行操作,同一二进制位上的数字同为1则按位与结果为1,其他情况为0。
所以利用这个特点,我们想要知道一个数的二进制位的1的个数,我们只需要对它的二进制位每次向右利用移位操作符每次移动一位然后对其进行按位与1操作,这样如果该位是1,则与1的二进制位最后一位1按位与后仍然是1。最后判断1的个数即为该数二进制位中1的个数。
int count_num(int n)
{
int i = 0;
int count = 0;
for (i = 0; i < 32; i++)
{
if((n>>i)&1==1)
count++;
}
return count;
}
方法二、
int count_num(int n)
{
int count = 0;
while (n)
{
n = n & (n - 1);
count++;
}
return count;
}
n&(n-1)这种操作每操作一次就会将n的最后一位的1消除