题目:
写一个函数返回参数二进制中 1 的个数
比如: 15 0000 1111 4 个 1
程序原型:
int count_one_bits(unsigned int value)
{
// 返回 1的位数
}
题目解析:整型int 在内存单元中所占用的内存为4字节即32比特位,要判断一个2进制数有多少个位数为1,则需要判断32次,首先可构建出一个for循环来实现这一过程。其次,如何判断当前位置的数字是不是1,这里需要用到位运算符 &(按位与),即相同为1,相异为0;而这个运算符是作用于当前位,如何使之与整型数的32位依次比较,可以用 <<(左移) 和 >>(右移)来实现。每当循环次数+1;让1左移一位,与目标数当前位置的数进行比较,如果比较值不等于0,则计数器+1;如果比较值等于0,则跳过,继续进行下次循环,直到比较完所有的32位,输出计数器的值即可。
代码如下:(运行环境为vs2013)
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int count_one_bits(unsigned int value)
{
int count = 0; // 计数器
for (int i = 0; i < 32; i++){
if ((value & (1 << i)) != 0){
count++;
}
}
return count;
// 返回 1的位数
}
int main(){
int temp;
printf("请输入一个整数:\n");
scanf("%d", &temp);
printf("这个整数的二进制序列中有%2d个1!\n", count_one_bits(temp));
system("pause");
return 0;
}