题目:
链接:剑指 Offer 65. 不用加减乘除做加法
难度:简单
写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。
示例:
输入: a = 1, b = 1
输出: 2
提示:
- a, b 均可能是负数或 0
- 结果不会溢出 32 位整数
位运算实现加法器:
见力扣详解。
代码:
class Solution {
public:
int add(int a, int b) {
if(a == 0 || b == 0) { // 不再有进位则代表计算结束
return a == 0 ? b : a;
}
int sum = a ^ b; // 对应位相加结果
unsigned int carry = (unsigned int)(a & b) << 1; // 进位结果
return add(sum, carry);
}
};
Tips:计算机中有符号整数通常用补码来表示和存储,正整数的补码与原码相同,负整数的补码为其原码除符号位外的所有位取反后加1。