《剑指Offer》Java刷题 NO.48 不用加减乘除做加法(位运算)

    技术2022-07-10  102

    《剑指Offer》Java刷题 NO.48 不用加减乘除做加法(位运算)

    传送门:《剑指Offer刷题总目录》

    时间:2020-06-30 题目: 写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。


    思路: 这道题考察基础知识:用位运算实现加减法,如果没有见过直接记住即可。 异或(^)可以实现无进位相加的结果,与(&)可以表示进位的数位。实现进位加法时,只要将进位值左移一位与异或值相加【相异或】即可,若再次产生进位,则再次相加,直到进位值为0 例如2+3(0010+0011),异或值(0010^ 0011=0001),进位值(0010&0011=0010),进位值左移并与异或值进行无进位相加【相异或】(0100^0001=0101),此时的进位值(0100&0001=0000=0),所以无进位相加的结果就是最终结果。


    Java代码:

    /** * @author LiMin * @Title: Add * @Description: * @date 2020/6/3021:26 */ public class Add { public int add(int num1, int num2) { int sum = num1 ^ num2;//无进位相加 int carry = (num1 & num2) << 1;//进位值,并左移一位 while (carry != 0) { int oldSum = sum; sum ^= carry; carry = (oldSum & carry) << 1; } return sum; } }
    Processed: 0.011, SQL: 9