现在的位置: 首页 > 综合 > 正文

不用加减乘除做加法

2018年05月10日 ⁄ 综合 ⁄ 共 704字 ⁄ 字号 评论关闭
题目描述:

写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。

解析:不用加减乘除,那就只能用位运算了,假设要相加两位数为11(1011)与21(10101),二进制相加与十进制相加是一样的,相同位置的数加上进位的就是该位的运算和。同等位数相加有如下情况:

                        1+0->1    1+1->0     0+1->0   0+0->0

             亲,这跟异或是不是有点像呢,所以可以用异或解决同位置的加法运算,至于进位情况如下:

                       1+1->1    1+0->0     0+1->0     0+0->0

            这跟与运算刚好一样,终于看到希望了吐舌头

    综上所述:先将要相加的数a和b进行异或运算得到c,再将a和b进行与运算得到d,再将d左移一位(因为是进位),将c与d相加就得到最终结果,下面就让我们来验证一下,就以11(1011)和21(10101)为例:

       1 0 1 1

^  1 0 1 0 1

——————

     1 1 1 1 0

          1 0 1 1

   & 1 0 1 0 1

________________

        0 0 0 0 1

     1 1 1 1 0

+   0 0 0 1 0

——————

   1 0 0 0 0 0

           由上面运算可以看到与预料的结果一样,所以该方法是可取的

代码:

                    int add(int num1 ,int num2){

                          if(num2==0) return num1;

                          int a=num1^num2;

                          int b=(num1&num2)<<1;

                          return add(a,b);

                    }

抱歉!评论已关闭.