剑指offer-JZ48-不用加减乘除作加法

题目描述

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

C++code

class Solution {
public:
    int Add(int num1, int num2)
    {
            while(num2 != 0){
                int sum = num1 ^ num2;
                int carry = (num1 & num2) << 1;
                num1 = sum;
                num2 = carry;
            }
        return num1;
    }
};

思路:不用加减乘除,则使用位运算io

^ :按位异或class

&:按位与扩展

<<i:左移i位,至关于乘上2的i次方循环

观察加法运算过程可发现,两位数加法A+B能够分红三步:while

1. A ^ B 获得不包含进位的相加个位的值co

2. (A&B)<< 1 获得进位值位运算

3.重复上两步直到进位值为0,跳出循环运算符

扩展:减法

减法至关于加上一个数的相反数,相反数能够经过全部位取反再加1获得