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!