整数转换。编写一个函数,确定需要改变几个位才能将整数A转成整数B。
示例1:
输入:A = 29 (或者0b11101), B = 15(或者0b01111)
输出:2
示例2:
输入:A = 1,B = 2
输出:2
提示:
A,B范围在[-2147483648, 2147483647]之间
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/convert-integer-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
我想出的办法是把两个数转换成无符号数,就可以比较二进制位了。
代码:
class Solution { public: int convertInteger(int A, int B) { int num = 0; unsigned int a = A,b = B; for(int i = 0;i < 32;i ++) { num += a % 2 != b % 2; a /= 2; b /= 2; } return num; } };
别人的思路是先异或得到的数中位为1表示两数不同的位,计算有几个1即可。
代码:
class Solution { public: int convertInteger(int A, int B) { int num = 0; int n = A ^ B; while(n) { num ++; n &= (int)(n - 1ll);//n&(n-1)表示n最低位的1变为0的数 } return num; } };