1
+記号を使用して2つの整数を加算しようとしています。キャリーなしの合計はa^bとして計算でき、キャリーは(& b)< <として計算できます。1. 0x7FFFFFFFは32ビット整数の最大数ですが、マスクは何をするのですか?なぜキャリーとは、各繰り返しでMASKを使ってmodにする必要がありますか?結果がMAX_INTより大きい場合、〜((& 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)