输入一个整数,求该整数的二进制表达中有多少个 1。c++
例如输入 10,因为其二进制表示为 1010,有两个 1,所以输出 2。编程
解法一是普通处理方式,经过除二余二统计1的个数;
spa
解法二与解法一相似,经过向右位移依次处理,每次与1按位与统计1的个数code
解法三比较奇妙,每次将数字的最后一位处理成0,统计处理的次数,进而统计1的个数io
#include "stdio.h" #include "stdlib.h" int count1(int x); int count2(int x); int count3(int x); int main(void) { int x; printf("输入一个数:\n"); setbuf(stdin,NULL); scanf("%d",&x); printf("%d转二进制中1的个数是:",x); printf("\n解法一:%d",count1(x)); printf("\n解法二:%d",count2(x)); printf("\n解法三:%d",count3(x)); printf("\n"); return 0; } //除2、余二依次统计每位 int count1(int x) { int c=0; while(x) { if(x%2==1) c++; x/=2; } return c; } //向右移位,与1按位与统计每位 int count2(int x) { int c=0; while(x) { c+=x & 0x1; x>>=1; } return c; } //每次将最后一个1处理成0,统计处理次数 int count3(int x) { int c=0; while(x) { x&=(x-1); c++; } return c; }
参考资料:编译
《编程之美》 电子工业出版社class