//写一个函数返回参数二进制中 1 的个数 ,比如: 15 0000 1111 4 个 1
程序原型:
int count_one_bits(unsigned int value)
{
返回 1的位数
}
方法一:
解题思路:1> 在32位操作系统下一个数字占四个字节,每个字节八比特位,因此一个数
占32个比特位,根据这个可以采用循环判断二进制中1的个数;
2> 我采用让1循环依次逻辑左移一位与想要检测的数字按位与,判断与结果,
符合count++;
3> 循环完成之后输出结果。(缺点:不能判断检测数中的长度,只能等待变量
i 循环完成)
源代码:
#include<stdio.h>
#include<stdlib.h>
//写一个函数返回参数二进制中 1 的个数 ,比如: 15 0000 1111 4 个 1
//程序原型:
//int count_one_bits(unsigned int value)
//{
// // 返回 1的位数
//}
int count_one_bits(unsigned int value)
{
int count = 0;
for (int i = 0; i < 32; i++)
{
if (value & (1 << i))//if((value >> i) & 1)
{
count++;
}
}
return count;
}
int main()
{
printf("%d\n", count_one_bits(15));
system("pause");
return 0;
}
运行结果:
方法二:
主要修改内容:1> for循环,通过判断value的值是否为0,然后value的二进制位逻辑
右移一位,直到value的值为0循环结束;
2> if语句只需与1按位与就可以。
源代码:
#include<stdio.h>
#include<stdlib.h>
//写一个函数返回参数二进制中 1 的个数 ,比如: 15 0000 1111 4 个 1
//程序原型:
//int count_one_bits(unsigned int value)
//{
// // 返回 1的位数
//}
int count_one_bits(unsigned int value)
{
int count = 0;
for (; value != 0; value >>= 1)
{
if (value & 1)
{
count++;
}
}
return count;
}
int main()
{
printf("%d\n", count_one_bits(15));
system("pause");
return 0;
}
运行结果:
无奋斗,不青春! 加油!青年!