剑指offer65 不用+-*/计算和

2020-05-07  本文已影响0人  再凌

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

位运算的知识点:

a^b -> 得到计算后的低位信息, 丢失进位信息
(unsigned) (a&b) << 1 -> 得到计算后每一位的进位信息, 通过左移之后, 交给高位

int add(int a, int b){
    int temp;
    while(a != 0)
    {
        //temp保存每一位加法后的低位信息
        temp = a ^ b;
        //a保存的是进位信息, 进位信息0或者1不代表正负, 因此用unsigned
        a = (unsigned) (a & b) << 1;
        b = temp;
    }
    return b;
}


时间复杂度: 1
空间复杂度: 1

上一篇下一篇

猜你喜欢

热点阅读