位運算來實現加法運算

2021-07-30 13:00:30 字數 1037 閱讀 8545

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