CPP劍指 Offer 65 不用加減乘除做加法

2021-10-08 00:26:02 字數 627 閱讀 3688

寫乙個函式,求兩個整數之和,要求在函式體內不得使用 「+」、「-」、「*」、「/」 四則運算符號。

示例:輸入: a = 1, b = 1

輸出: 2

不能使用加減乘除四則運算,所以只能返本溯源想到使用二進位制的位運算實現相加操作。

二進位制位運算中,異或操作: 1^1=0 0^0=0 1^0=1 0^1=1,可以模擬無進製的加操作;

與操作:1&1=1 0&1=0 1&0=0 0&0=0,可以模擬進製的情況,再將與後的值左移一位即等於進製值。

普通的十進位制數相加過程是:

各位相加,無進製和 2) 計算進製值 3) 無進製和加上進製值

使用位運算的二進位制數的相加過程相同:

兩個二進位制數各位異或,得到無進製的和 2) 二進位制數各位與再左移,計算進製 3) 無進製和與進製異或

重複上面操作,直到不再有進製,即進製為0。

需要注意的點是:cpp中不支援負數的左移,所以需要:(unsigned int)(a & b)

int

add(

int a,

int b)

return a;

}

劍指offer 65 不用加減乘除符號實現加法運算

兩個數相加 在二進位制中 只有1 1需要進製,進製之後這個位置結果為0,下一位的結果要加上1 異或 運算是進行的是 不進製加法,但是所進的位該怎麼表示 因為只有1 1才能進製,而只有 1 1 的結果為1 用 與 運算子得到兩個數的結果,1表示在這個位置要進製,0則不進,而進製要加在下一位上面,所以 ...

劍指 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...