Zoeken…


Nummerpariteitsdetectie met Bitwise AND

In plaats van dit (helaas te vaak gezien in de echte code) "meesterwerk":

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

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

U kunt de pariteitscontrole veel effectiever en eenvoudiger doen:

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

(dit is eigenlijk niet alleen geldig voor JavaScript)

Twee gehele getallen omwisselen met Bitwise XOR (zonder extra geheugentoewijzing)

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

Snellere vermenigvuldiging of deling door machten van 2

Bits naar links (rechts) verplaatsen is gelijk aan vermenigvuldigen (delen) met 2. Dit is hetzelfde in basis 10: als we 13 met 2 plaatsen links verschuiven, krijgen we 1300 of 13 * (10 ** 2) . En als we 12345 nemen en "rechts-verschuiven" met 3 plaatsen en vervolgens het decimale deel verwijderen, krijgen we 12 of Math.floor(12345 / (10 ** 3)) . Dus als we een variabele met 2 ** n willen vermenigvuldigen, kunnen we gewoon links verschuiven met n bits.

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

Op dezelfde manier kunnen we (gevlochten) gehele getallen delen met 2 ** n , naar rechts verschuiven met n bits. Voorbeeld:

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

Het werkt zelfs met negatieve getallen:

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

In werkelijkheid is het onwaarschijnlijk dat de snelheid van rekenen significant zal beïnvloeden hoe lang het duurt voordat uw code wordt uitgevoerd, tenzij u het doet in de orde van honderden miljoenen berekeningen. Maar C-programmeurs zijn dol op dit soort dingen!



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow