剑指Offer_48_不用加减乘除做加法

题目描述

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

解题思路

我们可以利用位运算,两个数相加先不考虑进位,得到结果,如5+17,101+10001,在不考虑进位时,得到的是10100,也即两个数异或。然后再对得到的数加上进位数。进位数只有在两个数均为1的情况下发生进位(相与为1),相与之后得到的结果是当前不为0的为的下一个位需要加上进位数,因此对相与结果左移一位。然后对两个结果相加,此时操作和上面的操作一致,直至没有进位。

实现

public class Solution {
    public int Add(int num1,int num2) {
        int adder, result;
        do{
            adder = (num1 & num2) << 1;
            result = num1 ^ num2;

            num1 = result;
            num2 = adder;

        }while (adder != 0);
        return result;
    }
}
原文地址:https://www.cnblogs.com/ggmfengyangdi/p/5809193.html