# 题目: 371. 两整数之和
给你两个整数 a 和 b ,不使用 运算符 + 和 - ,计算并返回两整数之和。
# 示例1:
输入:a = 1, b = 2
输出:3
# 示例2:
输入:a = 2, b = 3
输出:5
# 题解: 位运算
# 前置知识
在计算机中,有符号整数通常用补码来表示和存储,补码具有以下特征:
- 正整数的补码与原码相同;负整数的补码为其原码除符号位外的所有位取反后加 1。
- 可以将减法运算转化为补码的加法运算来实现。
- 符号位与数值位可以一起参与运算。
# 算法
二进制加法:
0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 0 (进位)
可以发现,对于整数 a 和 b:
- 在不考虑进位的情况下,其无进位加法结果为
。 - 而所有需要进位的位为
,进位后的进位结果为 。
# 代码
/**
* @param {number} a
* @param {number} b
* @return {number}
*/
var getSum = function(a, b) {
while(b!=0){
// 进位
const carry = (a&b)<<1
a ^=b
// 进位不为0 继续计算
b = carry
}
return a
};