1.问题描述:给定一个整数,统计其对应的二进制中含有1的个数。比如8(0000 1000),对应的二进制数中,只含有一个1.
2.设计思路:对x取余:z=x%2。如果z!=0,说明x的末尾不是为1.对于一个二进制x4x3x2x1进行分析,x1代表了1,x2代表了2,x3代表了4,x4代表了8。所以,可以将x循环往右移动(x=x>>1),如果x对应的二进制数中含有1,它一定会被移动到最低位上(x1)。那么此时,x所表示的数一定为奇数(x4x3x2x1中,只有x1为1,时所表示的数才为奇数)。当x为奇数时,x%2的结果为1。重复上述过程,直到x为0,便可以统计出x中含有1的个数。
3.代码:
#include <stdio.h>
/*统计一个十进制整数,对应的二进制数中含有1的个数*/int count(int x)
{int con = 0;while(x){if(x%2 != 0) //当x%2不等于0时,表示此时,x对应的二进制数的最低位上存在一个1 {con++;}x = x >> 1; //往右移移位,即x = x / 2 }return con;} int main()
{int ans;int a;printf("输入一个整数:\n");scanf("%d",&a);ans = count(a);printf("含有1的个数为:%d\n",ans);return 0;
}
4.运行结果:
5.总结:
统计一个整数对应的二进制数中含有多少个1,可以将整数x转换成二进制来分析。当二进制数的最低位为1时,x%2的结果一定为1。然后将x往右移动一位(x = x >> 1)。重复上述过程,直到x为0时,结束循环,便可以得到x中含有多少个1。