一、题目
整数转换。编写一个函数,确定需要改变几个位才能将整数A转成整数B。
示例1:
输入:A = 29 (或者0b11101), B = 15(或者0b01111)
输出:2
示例2:
输入:A = 1,B = 2
输出:2
二、代码
整体思路非常简单就是 按位异或,然后求1的个数
int convertInteger(int A, int B){
int count=0;
//这里是唯一需要注意的地方
//加入异或完结果是32个1,这个时候是负数的最小值,int能接收
//但是消除低位1的时候需要-1,这时候就会导致溢出
//所以需要用无符号整型来接收,当正数来处理
//就不会影响结果了
unsigned int ret=A^B;
while(ret)
{
ret=ret&(ret-1);
count++;
}
return count;
}