一、问题描述
题目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; }
四、小结
基础要打牢,不管学习什么知识、技能都是此理;懂这个道理的人肯定不少,只是能做到的少了些。