Bitwise-operators zijn handig in gebruik en kunnen razendsnelle code opleveren. Ontdek wat ze zijn en hoe ze te gebruiken.

Bitsgewijze operatoren zijn operatoren die op binair niveau werken. Ze zijn vaak erg snel uit te voeren en werken doorgaans op twee operanden.

U kunt bitsgewijze operatoren gebruiken om binaire getallen te manipuleren, code te optimaliseren, gegevens te comprimeren en technieken voor grafische weergave of het programmeren van games te implementeren. Net als de meeste andere programmeertalen biedt JavaScript uitstekende ondersteuning voor bitsgewijze bewerkingen.

Wat zijn operatoren?

De meeste programmeertalen gebruiken het concept van een "operator" - een symbool dat de tolk vertelt om een ​​specifieke wiskundige, relationele of logische bewerking uit te voeren.

Er zijn veel verschillende typen JavaScript-operatoren waarvan u op de hoogte moet zijn, van operatoren die eruitzien als standaard wiskundige operatoren, zoals "+", tot operatoren die twee waarden vergelijken. Bitsgewijze operatoren zijn een speciale set die te maken hebben met binaire getallen.

Bitsgewijze AND (&)-operator

De JavaScript bitsgewijze AND (&) operator vergelijkt de overeenkomstige bits van twee binaire operanden—getallen die alleen 0 en 1 bevatten. Voor elk paar invoerbits is de corresponderende uitvoerbit "1" als beide invoerbits anders "1" of "0" zijn.

Dit is de syntaxis van de bitsgewijze AND-operator:

een & b

In dit voorbeeld A En B zijn de operanden waarop u de bitsgewijze bewerking uitvoert.

Zo werkt de bitsgewijze AND-operator:

  1. De AND-bewerking is van toepassing op elk paar overeenkomstige bits in A En B van rechts naar links.
  2. Als beide bits 1 zijn, is het resultaat 1. Als een van beide bits 0 is, is het resultaat 0.
  3. Het resultaat is een nieuw getal waarbij elke bit de uitkomst vertegenwoordigt van de EN-bewerking op de overeenkomstige bits van A En B.

Bijvoorbeeld:

laten een = 50; // 00110010
laten b = 100; // 01100100

laten resultaat = a & b; // 00100000

troosten.log (resultaat); // 32

In het bovenstaande voorbeeld A is 50 in decimalen, gelijk aan het binaire getal 00110010, en B is 100 in decimalen, gelijk aan het binaire getal 01100100. De AND-operator vergelijkt elk paar overeenkomstige bits van rechts naar links en produceert het resulterende binaire getal 00100000, dat 32 in decimalen is.

Bitsgewijze OR (|)-operator

De bitsgewijze OR (|) operator vergelijkt de corresponderende bits van twee operanden en retourneert "1" als een of beide bits "1" zijn en "0" als beide bits "0" zijn.

Dit is de syntaxis van de bitsgewijze OR-operator:

een | B

Waar A En B zijn de operanden van de operatie.

De bitsgewijze OR (|)-operator werkt op dezelfde manier als de bitsgewijze AND-operator. Het enige verschil is dat de OR-operator "1" retourneert als "een van de" bits "1" is en "0" als "beide" bits "0" zijn.

Bijvoorbeeld:

laten een = 50; // 00110010
laten b = 100; // 01100100

laten resultaat = een | B; // 01110110

troosten.log (resultaat); // 118

In het bovenstaande voorbeeld vergelijkt de bitsgewijze OR-operator elk paar bits van rechts naar links (d.w.z. 0 | 0 = 0, 0 | 1 = 1, 1 | 1 = 1, enzovoort). Het resulterende binaire getal is 01110110, dat is 118 in decimalen.

Bitsgewijze XOR (^)-operator

De bitsgewijze XOR (^) operator vergelijkt de corresponderende bits van twee operanden en retourneert "1" als een van de operanden, maar niet beide, "1" is en "0" als beide operanden "1" of "0" zijn.

Dit is de syntaxis van de bitsgewijze XOR-operator:

een ^ b

Waar A En B zijn de operanden van de operatie.

De bitsgewijze XOR-operator werkt op dezelfde manier als de bitsgewijze OR- en AND-operatoren. Het enige verschil is dat het "1" retourneert als "een van de maar niet beide" operanden "1" is en "0" als "beide" operanden "1" of "0" is.

Bijvoorbeeld:

laten een = 50; // 00110010
laten b = 100; // 01100100

laten resultaat = een ^ b; // 01010110

troosten.log (resultaat); // 86

In het bovenstaande voorbeeld vergelijkt de XOR-operator elk paar bits van rechts naar links (d.w.z. 0 ^ 0 = 0, 0 ^ 1 = 1, 1 ^ 1 = 0, enzovoort). Het resulterende binaire getal is 01010110, dat is 86 in decimalen.

Bitsgewijze NOT (~) Operator

De bitsgewijze NIET (~) operator is een unaire operator die werkt op een enkel geheel getal door alle bits om te keren. Met andere woorden, het verandert elke "0" bit in "1" en elke "1" bit in "0".

Dit is de syntaxis van de bitsgewijze NOT-operator:

~ c

Waar C is de operand.

De bitsgewijze NOT-operator werkt door alle bits van een operand om te keren, inclusief de tekenbits.

Bijvoorbeeld:

laten c = 10; // 00001010
laten d = -10; // 11110110

troosten.log(~c); // 11110101
troosten.log(~d); // 00001001

In het bovenstaande voorbeeld keert de NOT-operator alle bits om (d.w.z. 01, 10, enz.), inclusief de tekenbits.

Linker shift (<

De linker shift-operator verschuift de bits van een bepaald getal naar links. De operator neemt twee operanden: het aantal dat moet worden verschoven en het aantal bits waarmee het moet worden verschoven.

Dit is de syntaxis voor de linker shift-operator:

een << b

Waar A is de operand voor de linker shift-operator, en B is het aantal bits waarmee de operator de operand zal verschuiven.

De linker shift-operator werkt door elk bit van een operand naar links te verschuiven met het gespecificeerde aantal posities en de overtollige bits die naar links zijn verschoven weg te gooien.

Bijvoorbeeld:

laten een = 50; // 00110010
laten b = 2;

laten resultaat = een << b; // 11001000

troosten.log (resultaat); // 200

In het bovenstaande voorbeeld heeft de linker shift-operator de decimale 50 van binair getal 00110010 met twee plaatsen verschoven. De resulterende binaire waarde is 11001000, wat 200 is als decimaal getal.

Sign-Propagating Right Shift (>>) Operator

De tekenvoortplantende rechtsverschuiving (>>) verschuift de bits van een getal naar rechts terwijl het teken van het oorspronkelijke getal behouden blijft. De operator neemt twee operanden: het aantal dat moet worden verschoven en het aantal bits waarmee het moet worden verschoven.

Dit is de syntaxis voor de operator voor het doorgeven van tekens naar rechts:

een >> b

Waar A is de operand voor de rechter shift-operator, en B is het aantal bits waarmee de operator de operand zal verschuiven.

De operator voor het doorgeven van tekens aan de rechterkant werkt op dezelfde manier als de operator voor de linker shift; het enige verschil in de werkingsmodus is dat de rechtse verschuiving het teken handhaaft.

Bijvoorbeeld:

laten een = -50; // 11001110
laten b = 2;

laten resultaat = een >> b; // 11110011

troosten.log (resultaat); // -13

In het bovenstaande voorbeeld heeft de rechter shift-operator het decimaalteken -50 (11001110) twee spaties naar rechts verschoven, wat resulteerde in het decimaalteken -13 (11110011).

Unsigned Right Shift (>>>)-operator

De niet-ondertekende rechtsverschuiving (>>>) operator verschuift de bits van een getal naar rechts met een opgegeven aantal posities en vult de lege ruimtes aan de linkerkant met nullen. De operator gooit overtollige bits weg die hij naar rechts verschuift.

Dit is de syntaxis voor de niet-ondertekende rechter shift-operator:

een >>> geb

Waar A is de operand voor de rechter shift-operator, en B is het aantal bits waarmee de operator de operand zal verschuiven.

De niet-ondertekende rechter shift-operator werkt op dezelfde manier als de rechter shift. In tegenstelling tot de rechter shift-operator (>>), het behoudt het teken van een cijfer niet bij het schakelen. In plaats daarvan behandelt het het getal als een geheel getal zonder teken en vult het meest linkse bit met een nul.

Bijvoorbeeld:

laten een = -5; // 11111111 11111111 11111111 11111011
laten b = 2;

laten resultaat = a >>> b; // 00111111 11111111 11111111 11111110

troosten.log (resultaat); // 1073741822

In dit voorbeeld heeft de niet-ondertekende rechter shift-operator "-5" twee spaties naar rechts verschoven, waardoor het teken effectief werd verwijderd en het decimaalteken "1073741822" werd verkregen.

De toepassingen van Bitwise-operators

Door individuele bits in binaire getallen te manipuleren, kunnen bitsgewijze operatoren complexe functionaliteit creëren die anders moeilijk of onmogelijk te bereiken is met traditionele rekenkundige bewerkingen.

Als u begrijpt hoe u bitsgewijze operatoren gebruikt, kunt u efficiëntere en beter presterende webapplicaties bouwen.