題目描述
寫乙個函式,求兩個整數之和,要求在函式體內不得使用+、-、*、/四則運算符號。
class
solution
return num1;}}
;
class
solution
:def
add(self, a:
int, b:
int)
->
int:
x =0xffffffff
a, b = a & x, b & x
while b !=0:
a, b =
(a ^ b)
,(a & b)
<<
1& x
return a if a <=
0x7fffffff
else
~(a ^ x)
使用位運算,對於位上0和0,1和1,0和1,求和結果就是做位異或運算的結果。但是由於存在進製的情況,考慮進製情況,結果就是做位與運算並左移一位。考慮到負數情況,左移會自動補齊1,所以使用unsigned int。
JZ48 不用加減乘除做加法
寫乙個函式,求兩個整數之和,要求在函式體內不得使用 四則運算符號。位運算表 加法位運算對照表 參考 解析 首先看十進位制是如何做的 5 7 12,三步走 第一步 相加各位的值,不算進製,得到2。第二步 計算進製值,得到10.如果這一步的進製值為0,那麼第一步得到的值就是最終結果。第三步 重複上述兩步...
JZ48 不用加減乘除做加法
劍指offer上遇到的乙個題,還蠻有意思的。演算法描述 寫乙個函式,求兩個整數之和,要求在函式體內不得使用 四則運算符號。解題思路 看到不用四則運算符號的時候第一反應就是將其轉化為二進位制的位運算。在計算機中,整數n是用補碼進行儲存的 補碼 如果n為正數,則原碼 反碼 補碼,如果n為負數,則補碼 反...
JZ48 不用加減乘除做加法
題目描述 寫乙個函式,求兩個整數之和,要求在函式體內不得使用 四則運算符號。題解 不用加減乘除的加法運算,需要用到位運算。1 將兩數異或 異或0 0 0 0 0 0 10 1 1 1 01 0 1 1 11 1 0 答案錯誤 我們從以上 可以看出,當涉及到進製時結果就會錯誤,所以我們需要處理進製。2...