0%

面试题 05.06. 整数转换

面试题 05.06. 整数转换

位运算,仅遍历1
1
2
3
4
5
6
7
8
9
10
11
12
13
class Solution {
public:
int convertInteger(int A, int B) {
unsigned int C = A ^ B; // 由于有符号数的int只有31位表示数值,一位表示符号,所以转换成无符号数防止在负数的31个1减1后溢出(但是在vs中调试时,溢出后会变成有符号数的正数最大值,计算依旧成立)
int ret = 0;
while(C)
{
C &= C - 1;
++ret;
}
return ret;
}
};