
Sum of Two Integers
Calculate the sum of two integers a and b, but you are not allowed to use the operator + and -.
For Example:
|
|
| 提示 | 解題應用 |
|---|---|
| BitManipulation | XOR,AND |
Default:
|
|
解答思路:
這讓我想到很久以前做的加法器Verilog,總之需要知道一些關於二進位上的實作,否則可能需要想一段時間,一般來說相加用XOR實作,因為1與0可以被保留,而1與1則歸0表示進位,正好是我們所需要的結果,但是還要再對那些進位的狀況做處理,會進位的狀況只有兩個1,所以先用AND來實做,接著才向左位移1,而這時候我們再用XOR對進位做相加,一直到沒有進位的狀況即可完成加法實作。
程式碼解說:
這邊用遞回來實作,a是兩數XOR不包含進位的狀況運算後的結果,而b則是兩數AND後左移代表進位後的結果,如果b為0表示沒有進位的問題就直接回傳a,否則就再重覆上述動作直到b為0為止
|
|
完整程式碼:
|
|
總結:
要用XOR與AND來實作二進位加法,一般來說相加用XOR實作,因為1與0可以被保留,而1與1則歸0表示進位,正好是我們所需要的結果,但是還要再對那些進位的狀況做處理,會進位的狀況只有兩個1,所以先用AND來實做,接著才向左位移1,而這時候我們再用XOR對進位做相加,一直到沒有進位的狀況即可完成加法實作。