位运算a+b

1、先计算a和b(忽略进位),相当于位运算符a^b

2、再计算应该进位的值,相当于位运算(a&b)<<1,再把两者相加,相当于位运算a|b(如果还有进位,那么重复前面两步,不能直接a|b),没有进位后,结果就是a|b(之前得出的结论,如果没有进位那么a+b = a|b)。

3、

#include <iostream>
using namespace std;
int main () {
    int a, b, x, y;
    cin >> a >> b;
    x = a | b;//0011 x=0110
    y = a & b;//0101 y=0001
    cout<<x<<endl;
    cout<<y<<endl;
    while (y) {
        x=a^b;  //0110  0100 0000
        y <<= 1;//0010  0100 1000
        a = x;
        b = y;
        x = a | b;//0110 0100 1000
        y = a & b;//0010 0100 0000
    }
    cout << x << endl;//1000
    return 0;
}

4、

int aplusb(int a, int b) { 
    if((a&b) == 0)
        return a|b;
    return aplusb(a^b,(a&b)<<1);
}
展开阅读全文

没有更多推荐了,返回首页