不使用運算子
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 ...