371. Suma de dos números enteros
Dados dos números enteros a y b, sin utilizar los operadores + y -, calcula y devuelve la suma de los dos números enteros.
class Solution {
public:
int getSum(int a, int b) {
while (b != 0) {
// 计算进位:将 a 和 b 进行位与操作,然后左移 1 位。
unsigned int carry = (unsigned int)(a & b) << 1;
// 计算不考虑进位的和:将 a 和 b 进行位异或操作,得到加法的结果。
a = a ^ b;
// 将进位值赋值给 b,为下一次迭代做准备。
b = carry;
}
// 当进位为 0 时,a 的值就是最终的和。
return a;
}
};
Resumen de esta pregunta:
a ^ b
En otras palabras, la función de un XOR b: obtener el resultado de sumar dos números sin acarreo.(a & b) << 1
Función: puede calcular el acarreo de sumar dos números