web-dev-qa-db-fra.com

Comment ajouter deux nombres en JavaScript "sans utiliser d'opérateurs` + `ou` -` "?

▶ NOTE:

Ce n'est pas une question de base "comment ajouter des nombres en JavaScript"

Veuillez lire attentivement la question avant de voter

Je sais qu’une alternative à l’utilisation du signe + pour l’ajout est de faire quelque chose comme ceci:

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

Mais j'ai 2 problèmes:

  • C'est C++, pas JavaScript. Est-ce que cela est supporté en JavaScript?
  • Il est évident que tout l'astuce se trouve dans ^&<<, mais je ne sais pas comment commencer à les rechercher en JavaScript, car Je ne sais pas comment ils s'appellent .
    Pour quoi devrais-je googler?

J'ai essayé d'écrire cela en JavaScript ... mais il me manque quelque chose

var getSum = function(a, b) {
  return (a ^ b, (a & b) << 1)
};
13
Microsmsm

Nous allons utiliser opérateurs au niveau des bits et utiliser récursion

Nous utilisons cette méthode lorsque nous avons peu de ressources, en savoir plus sur l'utilisation de cette méthode!

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

Solution ES6 one-liner suggérée par @PatrickRoberts

const getSum = (a,b) => b ? getSum(a ^ b, (a & b) << 1) : a;

Une autre solution:

2- Technique des tableaux 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
}

3- Solution de contournement à utiliser plus signe sans l'écrire :

const getSum = (a, b) => eval(''.concat(a).concat(String.fromCharCode(0x2B)).concat(b));

12
Microsmsm

Bien, je réponds à la question telle que clairement décrite dans l’en-tête. Pas d'opération + ni d'opération - non? Pourtant ... pas avec les bits mais avec les mathématiques pures devrait être une réponse valable je suppose.

var x   = 1,
    y   = 2,
    sum = Math.log2(2**x * 2**y);
console.log(sum);

2
Redu
const add = (a, b) => new Function('a', 'b', `return ${a} ${String.fromCharCode(43)} ${b}`)(a, b);
1
Constantine