使用位運算進行加法運算

gebeng發表於2024-04-07

題目大意

給你兩個整數,求a + b,結果不會超過32位整數,但不能用 +、-、*、/等運算子!

思路

①異或運算 = 無進位和 (a ^ b)
②單獨提取進位:(a & b) << 1
③無進位和 + 進位 = 答案


Python,Java, C++ 等語言中的數字都是以補碼形式儲存的。
但Python沒有int,long等不同長度變數,即在程式設計時無變數位數的概念。

python獲取負數的補碼: 需要將數字與十六進位制數 0xffffffff 相與。
可理解為捨去此數字 32 位以上的數字(將 32 位以上都變為 000 ),從無限長度變為一個 32 位整數。


c++版本

class Solution {
public:
    int encryptionCalculate(int dataA, int dataB) {
        while(dataB != 0)
        {
            int c = (unsigned int)(dataA & dataB) << 1;
            dataA ^= dataB;
            dataB = c;
        }
        return dataA;
    }
};

python版本

class Solution:
    def encryptionCalculate(self, dataA: int, dataB: int) -> int:
        x = 0xffffffff
        # 取 補 碼
        a,c = dataA & x,dataB & x
        # 直 至 進 位 為 0
        while c != 0:
            a,c = a ^ c,(a & c) << 1 & x
        # 超 過 0x7fffffff【最大正數的補碼】,就是負數了,轉換【將32位以上的位取反】
        return a if a <= 0x7fffffff else ~(a ^ x)

相關文章