讓我們開始討論不使用 ' ' 運算子將兩個整數相加的核心。 這需要二進位操作。
我們將像常規加法一樣處理此問題,但使用二進位。
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中文網其他相關文章!