解法一
1、思路
计算
A
与B
的异或值C
,A
与B
就有多少位不同,C
的二进制表示中就有多少位为1
。
2、代码
class Solution {
public:
int convertInteger(int A, int B) {
int res = 0;
for (unsigned int C = A ^ B; C != 0; C >>= 1)
{
res += C & 1;
}
return res;
}
};
解法二
1、思路
计算
A
与B
的异或值C
,每个循环减去C
最右边为1
的位,循环的次数要少于解法一。
2、代码
class Solution {
public:
int convertInteger(int A, int B) {
int res = 0;
for (unsigned int C = A ^ B; C != 0; C &= (C - 1))
{
++ res;
}
return res;
}
};
注:
n & (-n)
:取得最低位的1所代表的值;
n & (n - 1)
:直接减去n中最低位的1。