位运算实现a+b

来源:互联网 发布:linux系统管理技术手册 编辑:程序博客网 时间:2024/05/22 07:04

a+b是一个非常简单的问题,基本上是编程初学者在hello world后第二个想去尝试完成的功能,本文将不使用+号及其他算术运算符,采用位运算的方式实现a+b

先举一个十进制加法的例子,比如45+67=112,如果不考虑进位得到的结果是2,只考虑进位得到的结果是110,加起来正好是112,对于二进制其实也是这样的,因此我们可以将加操作和进位操作分开,二进制不进位加法其实就是异或操作,而进位操作实际上就是两个数对应位都为1时的左移,考虑到进位次数有限,当进位为0时,加出来的就是答案了

int add(int a, int b) {    if (b == 0) {        return a;    }    int sum = a ^ b;            //加操作    int carry = (a & b) << 1;   //进位操作    return add(sum, carry);     //将加操作结果加上进位操作结果}

递归的效率有时不高,很容易转换成迭代

int add2(int a, int b) {    int sum = 0, carry = 0;    while (b) {        sum = a ^ b;        carry = (a & b) << 1;        a = sum;        b = carry;    }    return a;}


2 0
原创粉丝点击