如果要将整数A转换为B,需要改变多少个bit位?【关于二进制还需要进一步学习 参考了别的方法 但理解并不透彻】
样例
如把31转换为14,需要改变2个bit位。
(31)10=(11111)2
(14)10=(01110)2
/**
*@param a, b: Two integer
*return: An integer
* 二进制只能表示整数,负数的二进制是补码形式表示,所以如果单纯除2无法直接得到负数的二进制
* 借由一个flag flag从1开始,每次运算之后左移1位, 也就是10,100,1000,等等
* 直到1超过32位或64位,flag变成0
* 我们将a,b 分别于flag进行与(&)运算,与运算定义是,只有运算双方都为1时候,结果才为1. a & flag,
* 运算结果是a[i]=1时候,结果为1, a[i]=0时候,结果为0。b[i]的运算性质和a[i]一致。
* 因此通过比较a & flag 和 b & flag, 可以得到对应位数的值是否相同。
*/
public static int bitSwapRequired(int a, int b) {
// write your code here
int change = 0;
int flag = 1;
int i=0;
int j=0;
while(flag!=0){
i = a & flag;
j = b & flag;
if((i ^ j)!=0)
change++;
flag = flag<<1;
}
return change;
}
};