原题出处:https://leetcode.cn/leetbook/read/top-interview-questions-medium/xwaiag/
解法一(python)
class Solution:
def getSum(self, a: int, b: int) -> int:
mask = 0xffffffff # 定义掩码,确保计算过程中不会越界
while b:
# 通过异或运算计算 a 和 b 不考虑进位的和
# 通过与运算计算 a 和 b 的进位
a, b = (a ^ b) & mask, ((a & b) << 1) & mask
# 对结果进行符号处理
return a if a <= 0x7fffffff else ~(a ^ mask)
解法二(Rust)
fn get_sum(a: i32, b: i32) -> i32 {
let (mut a, mut b) = (a as u32, b as u32);
let mut carry;
while b != 0 {
carry = a & b;
a ^= b;
b = carry << 1;
}
a as i32
}
思路:可以使用位运算符来实现两整数之和的计算。具体地说,可以使用异或运算符计算两数不考虑进位的和,使用与运算符计算进位的位置,并将进位和两数不考虑进位的和重复进行上述操作,直到进位为0,即可得到最终结果。