不用加减乘除做加法

2016-06-10  本文已影响808人  豆豆先生的小屋
题目要求:写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。

仔细一看这题颇有意思,求两个数之和,而且不让用运算符,那么我们就要从二进制入手了。现在假设我们这来那个数分别为12和9,对应的二进制为:1100和1001

  1.  首先只做加法,不考虑进位问题。结果为0101。相当于做异或运算,(1100^1001)=0101
    
  2. 接着只考虑进位。只有1+1会发生进位,所以相当于做按位与运算, 得到结果:(1100&1001)=1000
  3. 在二进制中,1+1会发生进位。所以对于第二步的结果应该采用左移1位 1000<< = 10000

重复上面的步骤,对0101和10000进行加法运算

  1. 算出异或运算0101^10000=10101
  2. 计算进位,(按位与运算)0101&10000=00000

** 结果为0,所以10101就是二进制加法1100和1001的最后结果。换算为十进制就是21**

用程序语言描述是这个样子的:

 public int Add(int num1,int num2) {
    while (num2!=0) {
        int a = num1^num2;
        num2 = (num1&num2)<<1;
        num1 = a;
    }
    return num1;
}
上一篇 下一篇

猜你喜欢

热点阅读