十进制整数如何利用位操作求的该整数的二进制中1的个数


此题可有多种方法,大概可以分为两种:一种是制表法,另一种就是通俗的数学方法。其中数学方法中一个简单明了的方法就是利用一个while循环,采用按位与的方式。代码如下:

#include<iostream>
using namespace std;
int main()
{
	int a;
	int count;
	while(cin>>a&&a)
	{
		count=0;
		while(a>0)
		{
			a=(a-1)&a;
			count++;
		}
		cout<<count<<endl;
	}	
	return 0;
}





但是此代码有一个致命的缺陷,就是当输入数字是负数时,输出结果都是0。改进方案如下:

#include<iostream>
using namespace std;
int main()
{
	int a;
	int count;
	while(cin>>a&&a)
	{
		count=0;
		while(a)
		{
			if(a&1==1)
			{
				count++;
			}
			a=a>>1;
		} 
		cout<<count<<endl;
	}	
	return 0;
}


此思路较为清晰,方法就是每次都查看该十进制数末尾是否为1,如果是count++,如果不是,将最后一位右移。然后再比较下一位。

另一种比较难

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值