不使用加法運算符實現加法--LintCode領釦編程題

    public static int add(int a, int b) {
		int sum = a^b;
		int carry = (a & b) << 1;
		if(carry == 0) {
			return sum;
		}
		return add(sum,carry);
	}

原理:主要使用按位運算符中的異或運算符^和與運算符&

  • ^:相同爲0,相異爲1;
  • &:同是1 才爲1,其他都爲0,和邏輯與類似,可以把1看作true;

二進制的加法運算,和異或操作非常相似,以4位爲例

加法 異或
0110 0110
0101 0101
1011 0011

從上可以看到,加法操作和異或的區別就在於進位,加法會進位,而異或沒有,那麼異或加上進位數不就可以了
怎麼求進位數?
當都爲1時,會發生進位,可使用&進行識別,再通過左移<<得到進位數,和異或結果求和即可

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章