/*
把整数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;
}