這道題挺經典的,之前自學python的時候看過這樣一個例子,這裡記錄一下思路。
題目描述:
給定兩個整數,實現a + b但不用 + 或 - 操作符
思路
一開始可能會覺得奇怪,不給使用四則運算還玩什麼?但這是計算機問題,可以回顧一下加法和減法的具體操作(減法是加法的逆運算,視為同理)
對於 a + b = c 而言,不妨以十進位制舉例,對於 15 + 17 = 32而言,可以先視作
1.按位相加
2.根據有無進位繼續做加和
從底層實現的角度來看,這裡跟 加法器 的原理是一致的,只是底層是二進位制而不是十進位制罷了。
半加器原理:
S = ~A & B + A & ~B = A^B (按位加和)
C = A & B (進位判斷)
因為存在進位的情況,所以在這道題的實現中,需要在相加之後做一個 << 1 操作,總程式碼實現如下
int getSum(int a, int b) {
if(b == 0)return a;
int carry = (a & b) << 1;
int sum = a ^ b;
return getSum(sum,carry);
}
複製程式碼