题目链接:面试题 05.06. 整数转换 - 力扣(LeetCode)
所属专栏:刷题
整数转换。编写一个函数,确定需要改变几个位才能将整数A转成整数B。
示例1:
输入:A = 29 (或者0b11101), B = 15(或者0b01111) 输出:2
示例2:
输入:A = 1,B = 2 输出:2
提示:
- A,B范围在[-2147483648, 2147483647]之间
分析:
大家看见示例1大概率是以为十进制直接比较,但是如果看到示例2你就会发现实际上比较的是2进制,一般涉及到2进制都会涉及到位运算
参考代码:
int convertInteger(int A, int B)
{
int count = 0;
int c = A ^ B;
/*关键点*/
int sum = 32;
//因为int类型最多只要比较32位
while (c != 0&&sum)
{ /*c!=0:减少比较次数,若没有,则会所有情况都会比较32次,像A=1,B=2的情况只需比较最低的几位,若比较32次则严重影响效率*/
if (c & 1 == 1)//看哪些位上的数为1,说明该位是AB两数不同的位,需要改变
count++;
c = c >> 1;//比较的是最后一位是否为1
sum--;//记得减减
}
return count;
}
恭喜你今天又进步一点点啦~