剑指-简单-不用加减乘除做加法

剑指-简单-不用加减乘除做加法

题目描述

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

思路

(1) 两数做与(&)运算之后二进制保留同为 1 的位置,也就是需要进位的位置。
(2) 两数做异或(^)运算之后二进制保留除了同为 1 以外 1 的位置。
(3) 循环将两数与(&)运算之后进位的结果再和两数异或(^)运算的结果做异或运算。
(4) 直到二进制没有位置进位,则运算完成。

代码

class Solution {
    
    
    public int add(int a, int b) {
    
    
        // 任何数 +0 都等于自身,一个数为 0 则直接返回另一个数。
        if (a == 0) {
    
    
            return b;
        }
        if (b == 0) {
    
    
            return a;
        }
        while (b != 0) {
    
    
            // 与运算得到两个数二进制都为 1 的部分,左位移进位。
            int temp = (a & b) << 1;
            // 异或运算得到两个数二进制不同时为 1 的 1 部分。
            a ^= b;
            // 将进位的数继续与 a 做运算,直到没有进位。
            b = temp;
        }
        return a;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_32301683/article/details/108361935