标签:示例 溢出 获取 class == 相同 输出 using 汇总
不使用运算符 + 和 - ???????,计算两整数 ???????a 、b ???????之和。
示例 1:
输入: a = 1, b = 2
输出: 3
示例 2:
输入: a = -2, b = 3
输出: 1
思路:
例子:
补码 = 原码的反码 + 1
负数异或需转换成补码形式进行计算,3 的补码:0000 0011,-2的补码:1111 1110
#include<iostream>
using namespace std;
class Solution {
public:
int getSum(int a, int b) {
if((a&b) == 0) return a|b;
return this->getSum(a^b,(a&b)<<1);
}
};
int main() {
Solution a;
cout << a.getSum(5,7) << endl;
return 0;
}
Line 5: Char 36: runtime error: left shift of negative value -2147483648 (solution.cpp)
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior prog_joined.cpp:14:36
while (b) {
auto c = ((unsigned int)a & b) << 1; // 防止 AddressSanitizer 对有符号左移的溢出保护处理
a = a ^ b;
b = c;
}
return a;
或者
if((a&b) == 0) return a|b;
return this->getSum(a^b,((unsigned int)a&b)<<1);
标签:示例 溢出 获取 class == 相同 输出 using 汇总
原文地址:https://www.cnblogs.com/hencins/p/14670997.html