位运算实现整数加法本质就是用二进制进行运算。

    其主要用了两个基本表达式:

  1. x^y //执行加法,不考虑进位。

  2. (x&y)<<1 //进位操作

令x=x^y ;y=(x&y)<<1 进行迭代,每迭代一次进位操作右面就多一位0,最多需要“加数二进制位长度”次迭代就没有进位了,此时x^y的值就是结果。


我们来做个3位数的加法:

101+011=1000 //正常加法

位运算加法:

(1)        101 ^ 011 = 110

                (101 & 011)<<1 = 010

(2)        110 ^ 010 = 100

                 (110 & 010)<<1 = 100

(3)        100 ^ 100 = 000

                (100 & 100)<<1 = 1000

    此时进行相加操作就没有进位了,即000 ^ 1000=1000即是最后结果。


代码如下:

int Add(int x,int y){
    if(y==0)  { return x; } //没有进位时完成运算
    int sum,carry;
    sum=x^y;
    carry=(x&y)<<1;
    return Add(sum,carry); //递归相加
}