让我们开始讨论不使用 ' ' 运算符将两个整数相加的核心。 这需要二进制操作。
我们将像常规加法一样处理此问题,但使用二进制。
XOR (^) 位运算符完美地处理了这个初始和:
这符合我们的需求:1 1 → 0(带进位)、0 1 或 1 0 → 1 和 0 0 → 0。
现在,让我们来谈谈携带者。 AND (&) 运算符帮助我们找到它们:
要将进位左移,我们将使用左移位。
sum = a ^ b
(无进位求和的异或)carry = (a & b)
(并且用于携带)carry == 0
:a = sum
b = carry << 1
(进位左移)sum = 0101 ^ 0011 = 0110
carry = 0101 & 0011 = 0001
sum = 0110 ^ 0010 = 0100
carry = 0110 & 0010 = 0010
sum = 0100 ^ 00100 = 0000
carry = 0100 & 0100 = 0100
sum = 0000 ^ 1000 = 1000
carry = 0000 & 1000 = 0000
进位为 0,所以最终的和是 1000 (8)。
Python 的无界整数会导致负数问题。 左移可以导致无限增长。 为了解决这个问题,我们需要模拟固定大小的整数(例如 32 位)。
我们将使用 32 位掩码 (0xFFFFFFFF) 来限制位数:
这可确保仅考虑最后 32 位,从而防止无限增长。 如有必要,我们还会通过将其转换为 32 位二进制补码表示来处理潜在的负面结果。
这种方法有效地模拟了Python中的32位整数运算,解决了无界整数和负数的问题。 if a > MAX_INT
条件确保结果保持在 32 位有符号整数范围内。 -12 和 -8 的示例演示了此校正如何产生 -20 的预期结果。
我的名字是 Jaimin Bariya,如果您发现有用的东西,请点赞和评论,并在 github jaimin-bariya 上关注我
以上是两个整数的和 - leetcode - Python的详细内容。更多信息请关注PHP中文网其他相关文章!