统计二进制数中1的个数,用一个函数返回参数二进制中1的个数
统计二进制数中1的个数,用一个函数返回参数二进制中1的个数
#include<stdio.h>
int count_bit(unsigned int num);
int main()
{
int num = 0;
int count = 0;
scanf("%d", &num);
count = count_bit(num);
return 0;
}
int count_bit(int num)//最优解
{
int count = 0;
while (num)
{
num = num & (num - 1);//n与(n-1)按位与运算,结果总是会使二进制中1的个数减少1
count++;
}
return count;
}
第二种方法
int count_bit( int num)//补码结果与1按位与运算也能得到结果,过程形似短除法
{
int i = 0;
int count = 0;
for (i = 0; i < 32; i++)
{
if (((num >> i) & 1) == 1)//为什么按位与要从移位0开始计算呢?移位0表示原数开始算
{ //移位31表示原数只剩下最高位
count++;
}
}
return count;
}