兩個數相加 在二進位制中 只有1+1需要進製,進製之後這個位置結果為0,下一位的結果要加上1
異或 運算是進行的是 不進製加法,但是所進的位該怎麼表示
因為只有1+1才能進製,而只有 1&1 的結果為1 ,用 與 運算子得到兩個數的結果,1表示在這個位置要進製,0則不進,而進製要加在下一位上面,所以 a&b 的結果要左移一位
這樣a+b的結果就可以表示為 a^b + (a&b)<<1
當b=0的時候,結果就是a 因此我們找到了遞迴條件
計算機減法也是用補碼進行加法來計算的,所以ab的正負號不用考慮
int
add(
int a,
int b)
劍指 Offer 65 不用加減乘除做加法
寫乙個函式,求兩個整數之和,要求在函式體內不得使用 四則運算符號。示例 輸入 a 1,b 1 輸出 2 a,b 均可能是負數或 0 結果不會溢位 32 位整數假設 a的二進位制1011 b的二進位制1110 對於a,b相加的結果來說就是 0101 不進製 也就是異或操作 而進製的結果就是1010這個...
劍指Offer 65 不用加減乘除做加法
劍指offer contents 寫乙個函式,求兩個整數之和,要求在函式體內不得使用 四則運算符號。示例 輸入 a 1,b 1 輸出 2 又是一道腦筋急轉彎的題目。不能用加減乘除運算,就只能用二進位制位運算了。思路是通過二進位制位運算模擬十進位制的加法,加法分為3步 1.對應位相加,得到非進製和 1...
劍指 Offer 65 不用加減乘除做加法
寫乙個函式,求兩個整數之和,要求在函式體內不得使用 四則運算符號。示例 輸入 a 1,b 1 輸出 2 a,b 均可能是負數或 0 結果不會溢位 32 位整數ab 當前位進製00 0010 1001 1011 01記當前位為digit,進製為c,有以下關係 digit a b,c a b。則加法運算...