刷题记录(Sum of Two Integers Solution)

Leecode:Sum of Two Integers Solution(JS解答)

在这里插入图片描述
思路:先从10进制的运算开始理解, 7 + 8,首先计算不考虑进位的相加,结果为5,第二步只计算进位部分,为1向左偏移一位,1>>1即10,注意,如果第二步计算出来等于0,那意味着没有进位情况,第一步所求的结果就是结果值,但是,当第二步求出的结果不为0的时候,则需要继续运算,被运算的数即第一步和第二步求出的数,10+5,10+5第一步运算结果为15,第二步运算结果为0,即15就是所求结果。

二进制运算思路:
同样我们可以用三步走的方式计算二进制值相加: 5—101,7—111

第一步:相加各位的值,不算进位,得到010,二进制每位相加就相当于各位做异或操作,101^111。
第二步:计算进位值,得到1010,相当于各位进行与操作得到101,再向左移一位得到1010,(101&111)<<1。
第三步重复上述两步,各位相加 010^1010=1000,进位值为100=(010 & 1010)<<1。
继续重复上述两步:1000^100 = 1100,进位值为0,跳出循环,1100为最终结果。
结束条件:进位为0,即为最终的求和结果。

function getSum(a: number, b: number): number {
   var c:number;
   while (b != 0){
        c = (a&b);
        a = a^b;
        b= (c)<<1;
    }
    return a;
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值