371 兩整數之和

2021-10-03 04:53:42 字數 918 閱讀 9668

不使用運算子

class

solution

:def

getsum

(self, a:

int, b:

int)

->

int:

mask =

0x100000000

# 整型最大值

max_int =

0x7fffffff

min_int =

0x80000000

while b !=0:

# 計算進製

carry =

(a & b)

<<

1# 取餘範圍限制在 [0, 2^32-1] 範圍內

a =(a ^ b)

% mask

b = carry % mask

return a if a <= max_int else~(

(a%min_int)

^ max_int)

## ~((a % min_int) ^ max_int) 為什麼要對負數做這樣的處理呢?

#因為在python中int不是32位的,輸出是64位,所以乙個負數比如-2, 64位表示就是0x00000000fffffffe,

#用python求取這個16進製制的值int('0x00000000fffffffe', 16), 得到的數字是4294967294 不是我們想

#的-2,所以: a^mask是先對a的前32位取反,對應-2,就得到0x0000000000000002 再用~操作符對所以位置取

#反,對應-2,得到0xfffffffffffffffe

#總結一下就是,由於oj系統python最後返回的是64位,如果不對負數特殊處理,那麼負數的前32位是0,最後輸出的是

#大於32位的正數

371 兩整數之和

題目 不使用運算子 和 計算兩整數a b之和。示例 示例1 輸入 a 1,b 2 輸出 3 思路 位運算 可以發現,在位運算中的加法 不考慮進製1 就是異或運算的結果。但是僅僅有異或運算是不夠的,我們還需要知道,何時發生了進製,這就需要用到 運算 注意到 運算得到的進製1需要移1位來得到實際真實的進...

371 兩整數之和

1.題目 不使用運算子 和 計算兩整數 a b 之和。示例 1 輸入 a 1,b 2 輸出 3示例 2 輸入 a 2,b 3 輸出 12.分析 在不採用加法和減法的前提下計算兩整數之和,這需要使用與運算子和異或運算子,首先,利用與運算 a b,計算出 a 和 b 所有進製的位置,然後將其左移一位,這...

371 兩整數之和

給你兩個整數 a 和 b 不使用 運算子 和 計算並返回兩整數之和。示例 1 輸入 a 1,b 2 輸出 3示例 2 輸入 a 2,b 3 輸出 5 1000 a,b 1000因為不能使用加號和減號,故需要從計算機本身邏輯出發,即二進位制 a b c sum c 0 0 0 0 0 0 0 1 1 ...