欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

一刷剑指offer(47)——不用加减乘除做加法

程序员文章站 2022-07-10 20:23:08
...
题目:
写一个函数,求两个整数之和,要求在函数体内不得使用加减乘除四则运算符号。

求两数之和四则运算不可用,也就是说,只能用位运算。

分析一下十进制加法的步骤:

1、各位相加不进位

2、做进位

3、将前面两个结果加起来

转换成位运算:

1、不考虑进位,0+0=0,1+1=0,0+1=1,1+0=1,显然为异或运算。

2、只有1+1才会产生进位,可以想象成两个数先做位与运算,然后再向左移动一位。

3、把前面两个步骤结果相加

int Add(int num1,int num2)
{
    int sum,carry;
    do
    {
        sum=num1^num2;
        carry=(num1&num2)<<1;
        num1=sum;
        num2=carry;
    }while(num2!=0);
    return num1;
}