JZ48 不用加减乘除做加法

不用加减乘除做加法

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

思路:

这题首先1)计算不进位的加法,5 + 7 = 02;
    2)计算进位。5 +7 = 10;
    3)将1和2相加,10 + 2 = 12;
第一步就是异或操作,第二步首先使用&操作得到都为1的那些位,然后一定记得左移一位才是得到进位,因为10 & 10 = 10,但是应该要进位,所以<<1。
还有就是为什么需要一个循环,因为第一步和第二步相加,也可能进位,所以循环的终止条件是进位为0的时候才终止。
 
func Add( num1 int ,  num2 int ) int {
    //num2可以表示为进位,
    //循环的意义:循环将进位加到num1值上;
    for num2 != 0 {//进位为0时,跳出循环
        a := num1 ^ num2 //非进位求和
        b := num1 & num2 << 1 //计算出进位, 只有 1& 1才等于1,这个时候才会进位

        num1 = a
        num2 = b
    }

    return num1
}

  

posted @ 2021-04-10 20:29  zqlucky  阅读(64)  评论(0编辑  收藏  举报