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!



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow