当相加的进位为负数时,报错:
runtime error: left shift of negative value -4 (solution.cpp)
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior prog_joined.cpp:21:23
这是因为 C++ 中对负数的左移没有定义,需要注意定义进位的类型要使用无符号数,这时就可以正确左移。
class Solution {
public:
int getSum(int a, int b) {
while(b)
{
unsigned int carry = a & b;
a = a ^ b;
b = carry << 1;
}
return a;
}
};
参考:https://stackoverflow.com/questions/55615186/c-left-shift-overflow-for-negative-numbers