A+B單獨的通過算術運算實現是很簡單的,具體的代碼操作如下所示:
public class Solution {
/**
* @param a: An integer
* @param b: An integer
* @return: The sum of a and b
*/
public int aplusb(int a, int b) {
// write your code here
int sum;
sum = a + b;
return sum;
}
}
下面主要講的是通過位運算符實現相加操作。
思路:
不使用算術運算求和那麼只能考慮直接在二進制位上進行位運算,事實上利用異或運算(^)和與運算(&)就能完成加法運算要做的事情,其中異或運算完成相加但是不進位,而與運算計算出哪些地方需要進位,在通過左移運算(<<)就可以完成進位操作了。
例子:
先舉一個十進制加法的例子,比如4+6=10,如果不考慮進位得到的結果是2,只考慮進位得到的結果是8,加起來正好是10,對於二進制其實也是這樣的,因此我們可以將加操作和進位操作分開,二進制不進位加法其實就是異或操作,而進位操作實際上就是兩個數對應位都爲1時的左移,考慮到進位次數有限,當進位爲0時,加出來的就是答案了。
4 + 6 = 10
4的二進制:0000 0100
6的二進制:0000 0110
4 & 6 = 0000 0100 需要進位,左移一位,0000 1000
4 ^ 6 = 0000 0010
具體的代碼操作如下所示:
public class Solution {
/**
* @param a: An integer
* @param b: An integer
* @return: The sum of a and b
*/
public int aplusb(int a, int b) {
// write your code here
if(b==0) return a;
int sum = a ^ b; //加操作
int carry = (a & b) << 1; //進位,左移一位操作
//將加操作結果與進位操作結果相加作爲最後的結果
return aplusb(sum,carry);
}
}