Sök…
Nummerets paritetsdetektering med bitvis OCH
I stället för detta (tyvärr för ofta sett i den verkliga koden) "mästerverk":
function isEven(n) {
return n % 2 == 0;
}
function isOdd(n) {
if (isEven(n)) {
return false;
} else {
return true;
}
}
Du kan göra paritetskontrollen mycket mer effektiv och enkel:
if(n & 1) {
console.log("ODD!");
} else {
console.log("EVEN!");
}
(detta gäller faktiskt inte bara för JavaScript)
Byta två heltal med Bitwise XOR (utan ytterligare minnesallokering)
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
Snabbare multiplikation eller delning med krafter på 2
Att skifta bitar åt vänster (höger) motsvarar att multiplicera (dela) med 2. Det är samma i bas 10: om vi "vänsterförskjuter" 13
med 2
platser får vi 1300
eller 13 * (10 ** 2)
. Och om vi tar 12345
och "högerskift" med 3
platser och sedan tar bort decimaldelen, får vi 12
eller Math.floor(12345 / (10 ** 3))
. Så om vi vill multiplicera en variabel med 2 ** n
, kan vi bara vänster-växla med n
bitar.
console.log(13 * (2 ** 6)) //13 * 64 = 832
console.log(13 << 6) // 832
På samma sätt, för att göra (floored) heltal division med 2 ** n
, kan vi höger förskjuta med n
bitar. Exempel:
console.log(1000 / (2 ** 4)) //1000 / 16 = 62.5
console.log(1000 >> 4) // 62
Det fungerar till och med med negativa siffror:
console.log(-80 / (2 ** 3)) //-80 / 8 = -10
console.log(-80 >> 3) // -10
I verkligheten är hastigheten på aritmetik osannolikt att påverka hur lång tid din kod tar att köra, såvida du inte gör i storleksordningen 100 miljoner beräkningar. Men C-programmerare älskar den här typen av saker!