前言
【C语言:统计二进制中1的个数】
一、移位操作法1
int main()
{
int n = 0;
int count = 0;
int i = 0;
scanf("%d", &n);
for (i = 0; i < 32; i++)
{
if ((n & 1) == 1)
{
count++;
n = n >> 1;
}
}
printf("%d", count);
return 0;
}
二、移位操作法2
int main()
{
int n = 0;
int count = 0;
int i = 0;
scanf("%d", &n);
for (i = 0; i < 32; i++)
{
if (((n>>i) & 1) == 1)
{
count++;
}
}
printf("%d", count);
return 0;
}
三、模除法
int main()
{
unsigned int n = 0; //注意n一定要为无符号型,才可以计算-1中二进制的个数
//-1变成无符号类型时,在计算机中就是11111111111111111111111111111111,为最大的整数
int count = 0;
int i = 0;
scanf("%d", &n);
while (n)
{
if (n % 2 == 1)
count++;
n /= 2;
}
printf("%d", count);
return 0;
}
四、n & (n - 1)法
int main()
{
unsigned int n = 0;
int count = 0;
int i = 0;
scanf("%d", &n);
while (n)
{
n = n & (n - 1);
count++;
}
printf("%d\n", count);
return 0;
}
总结
以上就是C语言统计二进制位的个数。前两种方法都使用了移位操作的方法,第三种方法使用了模除法,第四种方法用到了位操作符中的&。供读者参考