1
我試圖用+符號添加兩個整數。我得到的想法是,無進位總和可以計算爲a^b,並且進位可以計算爲(a & b)< < 1. 0x7FFFFFFF是32位整數的最大值,但是掩碼是做什麼的?爲什麼carry和a必須在每次迭代中使用MASK進行修改?當結果大於MAX_INT時,〜((a & MAX_INT)^ MAX_INT)是做什麼的?用位操作添加2個整數
def get_sum(a,b):
MAX_INT = 0x7FFFFFFF
MASK = 0x100000000
while b:
carry = ((a&b) << 1) % MASK
a = (a^b) % MASK
b = carry
if a <= MAX_INT:
return a
else:
return ~((a & MAX_INT)^MAX_INT)