題目:
如題所示
思路:
邏輯運算,即二進制運算,無外乎與&、或|、非~、異或^以及移位>>,<<等操作;
而加法運算,在十進制中,只有按位相加以及進位兩個操作。
從二進制角度也一樣,就是bit位相加,加上相應的進位。
1、bit位相加,通過邏輯運算的異或操作可以實現,如0+1=1,1+0=1,0+0=0;
2、進位運算,通過邏輯運算的與操作可以實現,如1+1=1,因為進位是往高位+1,因此需要將進位結果左移一位。
將上述兩個操作再做加法運算,就是加法運算的結果,這是一個遞歸的過程,也可以通過非遞歸即循環來實現。
如求a+b,等價於(a^b)+(a&b)<<1
代碼:
#include <iostream> using namespace std; // recursive method int add_1(int num1,int num2){ if(num1==0) return num2; if(num2==0) return num1; int num_xor=num1^num2; int carry=(num1&num2)<<1; return add_1(num_xor,carry); } // non-recursive method int add_2(int num1,int num2){ int sum=0; int num3=0; int num4=0; while(num1&num2){ num3=num1^num2; num4=(num1&num2)<<1; num1=num3; num2=num4; } sum=num1^num2; return sum; } int main() { int num1=100; int num2=200; cout << add_1(num1,num2) << endl; cout << add_2(num1,num2) << endl; return 0; }