# 题目: 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
};

# 参考资料