Recherche…


Détection de parité du nombre avec bit à bit ET

Au lieu de cela (malheureusement trop souvent vu dans le vrai code) "chef-d'œuvre":

function isEven(n) {
    return n % 2 == 0;
}

function isOdd(n) {
    if (isEven(n)) {
        return false;
    } else {
        return true;
    }
}

Vous pouvez faire le contrôle de parité beaucoup plus efficace et simple:

if(n & 1) {
    console.log("ODD!");
} else {
    console.log("EVEN!");
}

(Ceci est en fait valable non seulement pour JavaScript)

Échange de deux entiers avec bit par bit XOR (sans allocation de mémoire supplémentaire)

var a = 11, b = 22;
a = a ^ b;
b = a ^ b;
a = a ^ b;
console.log("a = " + a + "; b = " + b);// a is now 22 and b is now 11

Multiplication plus rapide ou division par puissances de 2

Décaler les bits de gauche (à droite) équivaut à multiplier (diviser) par 2. C'est la même chose en base 10: si on «décale» 13 de 2 places, on obtient 1300 ou 13 * (10 ** 2) . Et si nous prenons 12345 et "shift-right" de 3 places et puis supprimons la partie décimale, nous obtenons 12 , ou Math.floor(12345 / (10 ** 3)) . Donc, si nous voulons multiplier une variable par 2 ** n , nous pouvons simplement décaler de n bits.

console.log(13 * (2 ** 6)) //13 * 64 = 832
console.log(13    <<   6)  //          832

De même, pour faire la division entière par 2 ** n , on peut décaler de n bits. Exemple:

console.log(1000 / (2 ** 4)) //1000 / 16 = 62.5
console.log(1000    >>   4)  //            62

Il fonctionne même avec des nombres négatifs:

console.log(-80 / (2 ** 3)) //-80 / 8 = -10
console.log(-80      >> 3)  //          -10

En réalité, il est peu probable que la vitesse de l'arithmétique ait un impact significatif sur la durée d'exécution de votre code, sauf si vous effectuez des centaines de millions de calculs. Mais les programmeurs aiment ce genre de choses!



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow