首页 > Web开发 > 详细

JS:两个数不使用四则运算得出和

时间:2020-03-21 10:16:55      阅读:66      评论:0      收藏:0      [点我收藏+]
// 原理:
// 因为按位异或的逻辑很像加法,例如1^0=1,0^0=0
// 唯一不同的是1^1=0,也就是说无法进位
// 于是我们把加法拆成 (全不进位得到的数)+(进位数)
// 假设我们算10+9(1010和1001),可以拆成 (0010^0001)+(10000)
// 前者只用按位异或,后者用按位与,再左移一位(模拟进位)
// 因此我们可以得到 a+b = (a^b) + ((a&b)<<1)
// 换一个方式理解,a和b均可拆成 2的指数次方的数 ,我们先把两者共有的数提取出来*2
// 再加上各自独有的数

// 由于加法不能用,要靠迭代进行
// 当其中一方(进位)为0时,退出迭代

function sum(a,b){
    if(a==0) return b
    if(b==0) return a
    let sumA = a^b;
    let sumB = (a&b)<<1;
    console.log(a.toString(2),b.toString(2),sumA.toString(2),sumB.toString(2),);
    return sum(sumA,sumB)
}

// 测试
var summ = sum(9,10);

 

JS:两个数不使用四则运算得出和

原文:https://www.cnblogs.com/chri330dj/p/12536724.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!