Suche…


Paritätserkennung der Zahl mit bitweisem UND

Stattdessen (leider zu oft im echten Code zu sehen) "Meisterwerk":

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

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

Sie können die Paritätsprüfung viel effektiver und einfacher durchführen:

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

(das gilt eigentlich nicht nur für JavaScript)

Vertauschen von zwei ganzen Zahlen mit bitweisem XOR (ohne zusätzliche Speicherzuordnung)

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

Schnellere Multiplikation oder Division durch Potenzen von 2

Das Verschieben von Bits nach links (rechts) ist gleichbedeutend mit Multiplizieren (Dividieren) mit 2. Gleiches gilt für Basis 10: Wenn wir 13 um 2 Stellen nach links verschieben, erhalten wir 1300 oder 13 * (10 ** 2) . Wenn wir 12345 nehmen und um 3 Stellen nach rechts Math.floor(12345 / (10 ** 3)) und dann den Dezimalteil entfernen, erhalten wir 12 oder Math.floor(12345 / (10 ** 3)) . Wenn wir also eine Variable mit 2 ** n multiplizieren wollen, können wir sie um n Bits nach links verschieben.

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

In ähnlicher Weise können wir eine Integer-Division durch 2 ** n , um n Bits nach rechts zu verschieben. Beispiel:

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

Es funktioniert sogar mit negativen Zahlen:

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

In der Realität ist es unwahrscheinlich, dass die Geschwindigkeit der Arithmetik die Ausführungszeit Ihres Codes wesentlich beeinflusst, es sei denn, Sie arbeiten in der Größenordnung von Hunderten von Millionen von Berechnungen. Aber C-Programmierer lieben so etwas!



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow