[剑指Offer]不用加减乘除做加法

题目描述

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

肯定可以用位运算来做的,我们想一下3+4是怎么运算的。

3(11) + 4(100) = 7(111)

先对两个数进行抑或操作(^),那么得到111,即为结果。

继续4(100) + 14(1110) = 18(10010)

  1. 先对两个数进行抑或操作(^),得到1010
  2. 然后对两个数进行与操作,得到0100
  3. 对第二步进行左移操作,得到1000
  4. 循环操作1010和1000 ,直到第二步得到的数为0的时候,那么就可以得出结果。

代码如下:

package 不用加减乘除做加法;

public class Solution {

    public int Add(int num1, int num2) {
        while (num2 != 0) {
            int a1 = num1 ^ num2;
            num2 = (num1 & num2) <<1;
            num1 = a1;
        }
        return num1;

    }
}

你可能感兴趣的:(剑指offer)