写一个函数统计返回参数二进制中1的个数
方法一:
int count_one_bits(unsigned int n)//无符号数不论正负
{
int count = 0;//计数器
while (n != 0)
{
if (n % 2 == 1)
{
count++;
}
n /= 2;
}
return count;
}
int main()
{
int num = 0;
scanf_s("%d", &num);
int ret = count_one_bits(num);//自定义函数求1的个数
printf("ret=%d\n", ret);
return 0;
}
方法二:
int count_one_bits(int n)
{
int count = 0;
int i = 0;
for (i = 0; i < 32; i++)
{
if (((n >> i)&1) == 1)//右移且与1
{
count++;
}
}
return count;
}
int main()
{
int num = 0;
scanf_s("%d", &num);
int ret = count_one_bits(num);
printf("ret=%d\n", ret);
return 0;
}
方法三:
int count_one_bits(unsigned int n)
{
int count = 0;
while (n != 0)
{
n = n & (n - 1);
//n=15
//1111-n 1110-n-1
//1110-n 1101-n-1
//1100-n
//n循环后每次最右边的1被去掉
count++;
}
return count;
}
int main()
{
int num = 0;
scanf_s("%d", &num);
int ret = count_one_bits(num);
printf("ret=%d\n", ret);
return 0;
}