剑指offer23

220 阅读1分钟

题目描述

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

解题思路分析

同样的,跟我们手动算加法一样

  • 先直接将两个数相加起来,使用位移运算^,如5+17,5的二进制为101,17的二进制为10001,使用^运算之后为10100
  • 接下来计算进位,使用&运算之后并向左移一位,5&17为01,向左移一位为10,接下来将前一步^计算得到的值一直重复这两不下去,直到进位为0则结束

代码实现

public int add(int num1, int num2) {
    int sum, carry;
    do {
        sum = num1 ^ num2;//计算第一步^
        carry = (num1 & num2) << 1;//计算进位
        num1 = sum;
        num2 = carry;
    } while (num2 != 0);//进位为0时结束
    return num1;
}