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

如何在JavaScript中添加两个数字;不使用+;`或“运算符”;?,javascript,algorithm,Javascript,Algorithm,我知道使用+符号进行加法的另一种方法是: int add(int a, int b) { if(b == 0) return sum; sum = a ^ b; carry = (a & b) << 1; return add(sum,carry); } 我们将使用,并且将使用 当我们有一些低资源时,我们使用这种方法 var getSum=函数(a,b){ 如果(b==0){ 返回a; }否则{ 返回getSum(

我知道使用
+
符号进行加法的另一种方法是:

int add(int a, int b)
{
     if(b == 0)
         return sum;
     sum = a ^ b;
     carry = (a & b) << 1;
     return add(sum,carry);
}
我们将使用,并且将使用

当我们有一些低资源时,我们使用这种方法

var getSum=函数(a,b){
如果(b==0){
返回a;
}否则{

返回getSum(a^b,(a&b)好的,我回答的问题在标题中有清楚的描述。没有
+
和没有
-
操作对吗?但是…不是按位而是纯数学应该是一个有效的答案

var x=1,
y=2,
总和=数学对数2(2**x*2**y);

console.log(sum);
与@PatrickRoberts建议的方法相同,但没有递归:

const add = (a, b) => {
  let c;
  while (a !== 0) {
    c = b & a;
    b = b ^ a;
    c = c << 1;
    a = c;
  }
  return b;
};
const add=(a,b)=>{
让c;
而(a!==0){
c=b&a;
b=b^a;

c=c我们可以使用while循环实现相同的功能。我们必须将进位移到左边,并将其添加到二进制数和中,直到没有进位为止(我们按照惯例添加小数)

函数getSum(a,b){ 而(b!=0){ var carry=a&b;//计算是否有需要添加的进位 a=a^b;//a用于保存总和
b=进位可以使用数组结构执行求和运算

function getSum(a, b){
  return Array(a).concat(Array(b)).length / 100;
}
每个输入被强制为一个数组,例如,一个值为5的输入将被强制为一个包含5个元素的数组。强制两个输入后,数组被合并为一个数组。最后一个数组的长度通过除以100来处理十进制值之和返回

现在,让我们试着对无效的输入案例进行防御,例如
字符串
或falsy值

const DEFAULT_NUMBER_VALUE = 0;
const DEFAULT_PRECISION = 100;

function parseAddInput(input){
  if (!input) {
    return DEFAULT_NUMBER_VALUE;
  }
  
  if (typeof input === 'string'){
    input = parseInt(input);
  }
  
  const roundedNumber = Math.round(input * (10 * DEFAULT_PRECISION));
  
  return roundedNumber;
}

function getSum(a, b){
  return Array(
    parseAddInput(a)
  ).concat(
    Array(parseAddInput(b))
  ).length / 100;
}

function add(number1, number2){
  return getSum(number1, number2);
}

你没有提供任何你尝试过的代码或示例。你本质上是将一个Comp Sci作业发布到stack overflow中,并要求我们为你解决它。你甚至链接到一个已经向你展示了方法的问题。关于stack overflow的任何问题都不会取代你自己的研究。要真正理解答案,你可以不要只是问我们“怎么做”解决这个问题。你必须尝试自己解决它,如果你陷入困境,提供代码和结果。看看并开始学习按位运算。它们在几乎所有语言中本质上都是相同的。然后回来问一个关于你陷入困境时编写的代码的具体问题。好的,算法是你复制了,你没有复制递归。…
&
=按位和,@Microsmsm这被否决了,因为很明显你没有努力产生任何尝试,也没有阅读关于JS运算符的文档。
const getSum=(a,b)=>b==0?a:getSum(a^b,(a&b)如果我们有负数,例如A=-1,b=1,那么第2点将失败。结果b 0应该为你的答案提供解释吗?试着说服我,在源代码中既没有
+
也没有
-
运算符的方法是不使用
+
-
运算符。使用eval应该更有效。
const add=eval(unescape('(a,b)=>a%2b'))
接受的答案可能只处理32位整数。但是这个答案适用于所有数字(有一些浮点错误…。即使有一些浮点问题,这也是非常原始的:)我喜欢你的解决方案。可以使用
a^=b;
而不是
a=a^b;
function getSum(a, b){
  return Array(a).concat(Array(b)).length / 100;
}
const DEFAULT_NUMBER_VALUE = 0;
const DEFAULT_PRECISION = 100;

function parseAddInput(input){
  if (!input) {
    return DEFAULT_NUMBER_VALUE;
  }
  
  if (typeof input === 'string'){
    input = parseInt(input);
  }
  
  const roundedNumber = Math.round(input * (10 * DEFAULT_PRECISION));
  
  return roundedNumber;
}

function getSum(a, b){
  return Array(
    parseAddInput(a)
  ).concat(
    Array(parseAddInput(b))
  ).length / 100;
}

function add(number1, number2){
  return getSum(number1, number2);
}