您的位置:首页 > 其它

LintCode 将整数A转换为B

2015-10-09 18:36 190 查看
将整数A转换为B

如果要将整数A转换为B,需要改变多少个bit位?

样例

如把31转换为14,需要改变2个bit位。

(31)10=(11111)2

(14)10=(01110)2

挑战

你能想出几种方法?

solution: 这题的意思就是比较A和B中不同位的个数及相异位的个数。因此,很容易想到异或操作,及相异为1,相同为0。因此可以先做C = A^B,然后在计算C的二进制表示中1的个数。其中计算C中二进制1的个数时使用左移,需要特别的注意,因为C可能为负数,负数的右移和正数的右移是有差别的。

code

class Solution {
public:
/**
*@param a, b: Two integer
*return: An integer
*/
int bitSwapRequired(int a, int b) {
// write your code here
int c = a ^ b;
return getBitCount(c);
}
private:
int getBitCount(int a) {
int count = 0;
//因为负数的右移是在前面填1,因此我们只需要移32就可。
for (int i = 1; i <= 32; ++i) {
count += a & 1;
a >>= 1;
}
return count;
}
};


当int型不是32位时会出现错误的答案,因此一种改进版本的代码为:

int getBitCount(int a) {
int count = 0;
while (a) {
a = a & (a - 1);
++count;
}
return count;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: