把整数A转化成B,所需要改变的二进制位的个数是多少?




/*
	把整数A转化成B,所需要改变的二进制位的个数是多少?

	思路很简单,若要把A转化成B,查看二进制形式有多少个位不一样,
	所以用亦或就可以搞定,A^B,相同为0,不同为1,所以不同位则
	为1,只要查看A^B中有多少个1就可以了。如何查看有多少个1呢??
	我们知道按位与都是1时才为1,否则为0,所以只要C不为0,就一直跟1按位与,(从最右开始一位一位的比对下去)
	如果当前位是1,则count+1,如果当前位是0,则count+0;
	然后count右移一位继续计算。
	比如A=31和B=14
	二进制形式为
	A=00011111
	B=00001110
	C=A^B,即:
	C=00010001
	C&1
	  00000001
	==00000001
	C>>1.继续计算下去...
*/
#include <stdio.h>
int bitSwapRequired(int a,int b)
{
	int count=0,c;
	for(c=a^b;c!=0;c=c>>1)
	{
		count+=c&1;
	}
	return count;
}
int main()
{
	int count;
	count=bitSwapRequired(31,14);
	printf("%d\n",count);
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值