calculate the
sumof
two integers a
and b, but you are not allowed to use the operator + and -.
example:
given a = 1
and b = 2, return
3.
分析:
這裡要求我們不能用加法、減法等運算子來實現加法運算。這裡應該使用位運算來實現加法運算,實際上,這也是計算機cpu內部實現加法運算的方案。
x xor y真值表:
x y output
0 0 0
0 1 1
1 0 1
1 1 0
x and y真值表:
x y output
0 0 0
0 1 0
1 0 0
1 1 1
我們可以基於以上的真值表用&和^運算來實現加法,每一位的^運算得到每一位上的不加進制的和,用&運算得到每一位的進製。
根據上面的分析,我們可以加x,y的每一位逐一進行xor和and運算,然後得到最後的結果。但如果要得到每一位,還要用到and運算。
比方說00001010,
要取倒數第二位的值(1),其值為:00001010&00000010
要取倒數第三位的值(0),其值為:00001010&00000100
要取倒數第四位的值(1),其值為:00001010&00001000
而且這樣還沒用真正得到每一位上的值,還要進行操作。
首先,我們通過對x和y進行&位運算,得出每一位上的進製。然後對x和y進行^位運算,得出沒有加進制的和。最後將所得的和當做新的x,所得的進製往左移一位(第零位的進製輸入為0)當做新的y,繼續做上面的步驟,直到進製為0,此時x中儲存的就是我們要求的x和y的和了。
**:
class
solution
return
sum;
}};
位運算 實現加法
用位運算實現加法也就是計算機用二進位制進行運算,32位的cpu只能表示32位內的數,這裡先用1位數的加法來進行,在不考慮進製的基礎上,如下 1 1 01 0 1 0 1 10 0 0很明顯這幾個表示式可以用位運算的 來代替,如下 1 1 01 0 1 0 1 10 0 0這樣我們就完成了簡單的一位數...
位運算 實現加法
用位運算實現加法也就是計算機用二進位制進行運算,32位的cpu只能表示32位內的數,這裡先用1位數的加法來進行,在不考慮進製的基礎上,如下1 1 01 0 1 0 1 10 0 0 很明顯這幾個表示式可以用位運算的 來代替,如下1 1 01 0 1 0 1 10 0 0這樣我們就完成了簡單的一位數加...
位運算實現加法
用位運算實現加法也就是計算機用二進位制進行運算,32位的cpu只能表示32位內的數,這裡先用1位數的加法來進行,在不考慮進製的基礎上,如下 1.1 1 0 2.1 0 1 3.0 1 1 4.0 0 0 很明顯這幾個表示式可以用位運算的 來代替,如下 1.1 1 0 2.1 0 1 3.0 1 1 ...