題目大意
給你兩個整數,求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)