写一个函数返回参数二进制中 1 的个数
程序员文章站
2022-07-15 10:02:12
...
**写一个函数返回参数二进制中 1 的个数
比如: 15 0000 1111 4 个 1
程序原型:
int count_one_bits(unsigned int value)
{
// 返回 1的位数
} **
/*
方法一
利用短除法,对2求模,统计1的个数
*/
#include<stdio.h>
#include<windows.h>
#pragma warning (disable : 4996)
int Count_one_bits(int value)
{
int count = 0;
while (value)
{
if (1 == value % 2)
{
count++;
}
value /= 2;
}
return count;
}
int main()
{
int number = 0;
scanf("%d", &number);
int count = Count_one_bits(number);
printf("%d",count);
system("pause");
return 0;
}
*/
/*
方法二
采用位运算,对输入数据的每个bit位与 1 相与,如果是1,则计数器加一。
*/
#include<stdio.h>
#include<windows.h>
#pragma warning (disable : 4996)
int Count_one_bits(int value)
{
int count = 0;
int i = 0;
for (; i < 32; i++)
{
if (1 == ((value >> i) & 1 ))
{
count++;
}
}
return count;
}
int main()
{
int number = 0;
scanf("%d", &number);
int count = Count_one_bits(number);
printf("%d",count);
system("pause");
return 0;
}
/*
方法三
采用消除输入数字中bit位为1的方法,
让value&(value-1),
0100
- 1
0011
0100 & 0011 = 0000
消去1;
*/
#include<stdio.h>
#include<windows.h>
#pragma warning (disable : 4996)
int Count_one_bits(int value)
{
int count = 0;
while (value)
{
value &= (value - 1);
count++;
}
return count;
}
int main()
{
int number = 0;
scanf("%d", &number);
int count = Count_one_bits(number);
printf("%d",count);
system("pause");
return 0;
}
上一篇: 写一个函数返回参数二进制中 1 的个数
下一篇: 【C语言学习笔记·一】了解C语言