一、问题描述
题目28:整数的二进制表示中1的个数
输入一个整数,求该整数的二进制表达中有多少个1。
例如输入10,由于其二进制表示为1010,有两个1,因此输出2。
二、算法描述
此问题比较基础,利用右移运算符就可以解决:以二进制表示的整数,可以通过判断它的奇偶性就可以确定它的最低位是否为1;然后右移一位,再判断它是否为1;直到这个数为零时可停止。
三、源代码
#include <stdio.h>
int count_one(int value)
{
int result = 0;
while(value) //当value为零时退出循环
{
if(value % 2 == 1) //若value为奇数,则one的个数加1
{
result ++;
}
value = value >> 1; //将value右移一位,除2
}
return result;
}
int main()
{
int i;
for(i = 0; i < 32; i ++)
{
printf("%d--%d\n",i,count_one(i));
}
return 0;
}
四、小结
基础要打牢,不管学习什么知识、技能都是此理;懂这个道理的人肯定不少,只是能做到的少了些。