#include <stdio.h>
//-1时, -1%2 = -1 ; -1%2根本不够除,n返回0,就不能执行下去
//改进:把符号位当成有效位进行处理 unsigned int
int count_bit_one1(unsigned int n)
{
int count = 0;
while (n)//
{
if (1 == n % 2)
{
count++;
}
n = n / 2;
}
return count;
}
//把32个比特位一个一个拿到手
int count_bit_one2(int n)
{
int count = 0;
int i = 0;
for (i = 0; i < 32; i++)
{
if (1 == ((n >> i) & 1))
count++;
}
return count;
}
int count_bit_one3(int n)
{
int count = 0;
while (n)
{
n = n & (n - 1);
count++;
}
return count;
}
int main()
{
//求二进制补码中1的个数
int a = 0;
scanf("%d", &a);
int count = count_bit_one3(a);
printf("count = %d", count);
return 0;
}
牛客网 | 求二进制补码中1的个数 【C语言】
最新推荐文章于 2022-04-26 11:35:10 发布