题目
整数转换。编写一个函数,确定需要改变几个位才能将整数A转成整数B。
示例1:
输入:A = 29 (或者0b11101), B = 15(或者0b01111) 输出:2
示例2:
输入:A = 1,B = 2 输出:2
解题
方法一:位运算1
比较两个数的 对应的位是否相同。
class Solution { public: int convertInteger(int A, int B) { int res=0; for(int i=0;i<32;i++){ if((A&(1<<i))!=(B&(1<<i))){ res++; } } return res; } };
方法二:位运算2
使用异或,然后统计异或为1的位。
注意-1的右移是-1。因此不能使用while(A!=0)作为条件,要用for循环32次。
class Solution { public: int convertInteger(int A, int B) { int res=0; A^=B; for(int i=0;i<32;i++){ res+=(A&1); A>>=1; } return res; } };