如何在JavaScript中添加两个数字"不使用`+`或`-`运算符"?

Mic*_*msm 19 javascript algorithm

▶注意:

这不是一个基本的"如何在JavaScript中添加数字"的问题

在downvoting之前请仔细阅读问题

我知道使用+符号进行添加的替代方法是执行以下操作:

int add(int a, int b)
{
     if(b == 0)
         return sum;
     sum = a ^ b;
     carry = (a & b) << 1;
     return add(sum,carry);
}
Run Code Online (Sandbox Code Playgroud)

但我有两个问题:

  • 这是C++,而不是JavaScript.这是否支持JavaScript?
  • 很明显,整个技巧都在^ & <<,但我不知道如何在JavaScript中开始寻找它们,因为我不知道它们叫什么.
    我甚至应该用谷歌搜索什么?

我试着用JavaScript编写这个...但似乎我想念一些东西

var getSum = function(a, b) {
  return (a ^ b, (a & b) << 1)
};
Run Code Online (Sandbox Code Playgroud)

Mic*_*msm 15

我们将使用按位运算符并使用递归

我们在资源很少时使用这种方法,在使用这种方法时阅读更多!

var getSum = function(a, b) {
    if (b == 0) {
        return a;
    } else {
        return getSum(a ^ b, (a & b) << 1)
    }
};
Run Code Online (Sandbox Code Playgroud)

@PatrickRoberts建议的ES6单线解决方案

const getSum = (a,b) => b ? getSum(a ^ b, (a & b) << 1) : a;
Run Code Online (Sandbox Code Playgroud)

另一解决方案

2-数组技术Array.prototype.fill()

const getSum = (a, b) => {
  const firstArr = new Array(a).fill(true);
  const secondArr = new Array(b).fill(true);
  return firstArr.concat(secondArr).length
}
Run Code Online (Sandbox Code Playgroud)

3-解决方法使用加号而不写它:

const getSum = (a, b) => eval(''.concat(a).concat(String.fromCharCode(0x2B)).concat(b));
Run Code Online (Sandbox Code Playgroud)

  • 一个非常相似的单行 [已建议](/sf/ask/2901902531/#comment70175130_41455750)由热杜。 (2认同)

Red*_*edu 5

好吧,我正在回答标题中明确描述的问题。没有+,没有-操作权..?但是...我想,不是按位运算而是纯数学运算是一个有效的答案。

var x   = 1,
    y   = 2,
    sum = Math.log2(2**x * 2**y);
console.log(sum);
Run Code Online (Sandbox Code Playgroud)