寫乙個函式,求兩個整數之和,要求在函式體內不得使用 「+」、「-」、「*」、「/」 四則運算符號。解題思路:利用與或符號,模擬位的加法與進製。
位的異或就是當前位的加法,但是沒有辦法算進製,所以,需要通過位與和左移來算進製,如果兩個都是1,那麼進製才是1。
為什麼負數也能適用呢?
以 9 + (-5)為例:
9 在8位暫存器的儲存二進位制**為:0000 1001
-5 在8位暫存器的儲存二進位制**為:1111 1011
二者相加為:(1)0000 0100 結果為4,溢位一位。
將 二進位制** 1111 1011 看作為原碼,結果為 251
因為 -5 ≡ 251(mod 256),即對模256而言,251 為 -5 的同餘數
即 9 + (-5)可以轉化為 (9 + 251)mod 256,捨去溢位的那一位。
class
solution
return a;
}}
演算法 不用加減乘除做加法
寫乙個函式,求兩個整數之和,要求在函式體內不得使用 四則運算符號。這是一道考位運算的題。參 牛客上的答案分析 按位與 按位或 按位異或 計算如下 a b按位計算如下 i為當前位 首先,加運算分為兩個部分 乙個是無進製,乙個是有進製,由1,2可知,無進製相當於操作 異或 而有進製則相當於操作 與 左移...
不用加減乘除實現加法
思路 我們一直在想,求兩數之和四則運算都不能用,那還能用什麼?對數字做運算,除了四則運算之外,也就只剩下位運算了。位運算是針對二進位制的,我們就以二進位制再來分析一下前面的三步走策略對二進位制是不是也適用。5的二進位制是101,17的二進位制是10001。還是試著把計算分成三步 第一步各位相加但不計...
不用加減乘除做加法
author 過路的守望 思路 i 先將各bit位相加,不計進製,這一步可以用m n實現 ii 加上進製,進製如何來,用m n可以得到m和n中都為1的bit位,而不全為1的位則全部變為了0,該位相加會發生進製,使得左邊一位加1,因此 m n 1邊可得到進製後要加的1的位置 iii 將前面兩步的結果相...