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

来源:互联网 发布:ccleaner清除数据 编辑:程序博客网 时间:2024/05/16 23:48




/*把整数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=00011111B=00001110C=A^B,即:C=00010001C&1  00000001==00000001C>>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;}