位运算实现两个数相加

       最近在网上做题,要求不用四则运算(+、-、*、/)实现两个数相加。我们首先想到的就是用位运算来实现,觉得挺有意思,也是对计算机底层运算原理的一个理解,故对其做了一个记录和原理分析。

函数实现如下图所示:

int add(int num1, int num2)
{
    int tmp1 = num1^num2;
    int tmp2 = (num1&num2)<<1;
    while(tmp2)
    {
        num1 = tmp1^tmp2;
        num2 = (tmp1&tmp2)<<1;
        tmp1= num1;
        tmp2= num2;
     }
     return tmp1;
}

原理分析:

以63加1为例,如下程序打印了位运算的过程(tmp1 和  tmp2 的二进制值):


其实原理很简单:

tmp1用来存放两个数相加(不进位)的结果,tmp2用来存放两个数相加的进位。那么number1加number2即可等效为tmp1加tmp2,由于tmp2是通过或运算再移位得来的,最终一定为为零,那么tmp1就是我们求的两数相加结果。

猜你喜欢

转载自blog.csdn.net/fangye945a/article/details/106752751