求解一个整数中含多少个1

本文介绍了一种用C语言的方法,通过取余和循环右移操作,统计一个整数对应二进制中1的个数。核心思路是利用二进制位运算判断最低位是否为1,并递归移位直到整数为0。
摘要由CSDN通过智能技术生成

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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值