Bitwise operatører er praktiske at bruge og kan resultere i blærer hurtigt kode. Find ud af, hvad de er, og hvordan du bruger dem.
Bitvise operatorer er dem, der virker på et binært niveau. De er ofte meget hurtige at udføre og handler typisk på to operander.
Du kan bruge bitvise operatorer til at manipulere binære tal, optimere kode, komprimere data og implementere teknikker til grafik eller spilprogrammering. Som de fleste andre programmeringssprog har JavaScript fremragende understøttelse af bitvise operationer.
Hvad er operatører?
De fleste programmeringssprog bruger begrebet en "operatør" - et symbol, der fortæller tolken at udføre en specifik matematisk, relationel eller logisk operation.
Der er mange forskellige typer JavaScript-operatorer du skal være opmærksom på, fra dem, der ligner standard matematiske operatorer, såsom "+", til operatorer der sammenligner to værdier. Bitvise operatorer er et særligt sæt, der omhandler binære tal.
Bitvis OG (&) Operator
JavaScript bitvis OG (&) operatør sammenligner de tilsvarende bits af to
binære operander - tal, der kun indeholder 0 og 1. For hvert par inputbits er den tilsvarende outputbit "1", hvis begge inputbits er "1" eller "0" ellers.Her er syntaksen for den bitvise AND-operator:
a & b
I dette eksempel, -en og b er de operander, som du udfører den bitvise handling på.
Sådan fungerer den bitvise AND-operator:
- AND-operationen gælder for hvert par af tilsvarende bits i -en og b fra højre mod venstre.
- Hvis begge bits er 1, er resultatet 1. Hvis begge bit er 0, er resultatet 0.
- Resultatet er et nyt tal, hvor hver bit repræsenterer resultatet af OG-operationen på de tilsvarende bits af -en og b.
For eksempel:
lade a = 50; // 00110010
lade b = 100; // 01100100lade resultat = a & b; // 00100000
konsol.log (resultat); // 32
I eksemplet ovenfor, -en er 50 i decimal, svarende til det binære tal 00110010, og b er 100 i decimal, svarende til det binære tal 01100100. AND-operatoren sammenligner hvert par af tilsvarende bit fra højre mod venstre og frembringer det resulterende binære tal 00100000, som er 32 i decimal.
Bitvis ELLER (|) Operator
Den bitvise ELLER (|) operator sammenligner de tilsvarende bits af to operander og returnerer "1", hvis den ene eller begge bit er "1" og "0", hvis begge bit er "0".
Her er syntaksen for den bitvise OR-operator:
en | b
Hvor -en og b er operationens operander.
Den bitvise OR (|) operator fungerer på samme måde som den bitvise AND operator. Den eneste forskel er, at OR-operatoren returnerer "1", hvis "enhver" af bits er "1" og "0", hvis "begge" bit er "0".
For eksempel:
lade a = 50; // 00110010
lade b = 100; // 01100100lade resultat = a | b; // 01110110
konsol.log (resultat); // 118
I eksemplet ovenfor sammenligner den bitvise OR-operator hvert par bits fra højre mod venstre (dvs. 0 | 0 = 0, 0 | 1 = 1, 1 | 1 = 1, og så videre). Det resulterende binære tal er 01110110, som er 118 i decimal.
Bitvis XOR (^) Operator
Den bitvise XOR (^) operator sammenligner de tilsvarende bits af to operander og returnerer "1", hvis en af operanderne, men ikke begge, er "1" og "0", hvis begge operander er "1" eller "0".
Her er syntaksen for den bitvise XOR-operator:
a ^ b
Hvor -en og b er operationens operander.
Den bitvise XOR-operator fungerer på samme måde som de bitvise OR- og AND-operatorer. Den eneste forskel er, at den returnerer "1", hvis "enten, men ikke begge" af operanderne er "1" og "0", hvis "begge" af operanderne er "1" eller "0".
For eksempel:
lade a = 50; // 00110010
lade b = 100; // 01100100lade resultat = a ^ b; // 01010110
konsol.log (resultat); // 86
I eksemplet ovenfor sammenligner XOR-operatøren hvert par bits fra højre mod venstre (dvs. 0 ^ 0 = 0, 0 ^ 1 = 1, 1 ^ 1 = 0, og så videre). Det resulterende binære tal er 01010110, som er 86 i decimal.
Bitvist IKKE (~) Operatør
Den bitvise IKKE (~) operator er en unær operator, der opererer på et enkelt heltal ved at invertere alle dets bit. Med andre ord ændres hver "0" bit til "1" og hver "1" bit til "0".
Her er syntaksen for den bitvise NOT-operator:
~c
Hvor c er operanden.
Den bitvise NOT-operator virker ved at invertere alle bits i en operand, inklusive fortegnsbittene.
For eksempel:
lade c = 10; // 00001010
lade d = -10; // 11110110
konsol.log(~c); // 11110101
konsol.log(~d); // 00001001
I eksemplet ovenfor inverterer NOT-operatoren alle bits (dvs. 0 → 1, 1 → 0osv.), herunder skiltene.
Venstre Shift (<
Den venstre skiftoperator flytter bits af et givet tal til venstre. Operatøren tager to operander: tallet, der skal skiftes, og antallet af bit, der skal skiftes efter.
Her er syntaksen for venstreskiftoperatoren:
a << b
Hvor -en er operanden for venstre skiftoperatør, og b er antallet af bits operatøren vil flytte operanden med.
Venstreskiftoperatøren fungerer ved at flytte hver bit af en operand til venstre med det angivne antal positioner og kassere de overskydende bits, der er flyttet til venstre.
For eksempel:
lade a = 50; // 00110010
lade b = 2;lade resultat = a << b; // 11001000
konsol.log (resultat); // 200
I eksemplet ovenfor flyttede venstreskiftoperatoren decimalen 50 for binær 00110010 to steder. Den resulterende binære værdi er 11001000, hvilket er 200 som en decimal.
Skilt-udbredende højreskift (>>) Operatør
Det tegn-udbredende højreskift (>>) flytter bits af et tal til højre, mens tegnet for det oprindelige tal bevares. Operatøren tager to operander: tallet, der skal skiftes, og antallet af bit, der skal skiftes efter.
Her er syntaksen for den fortegnsforplantende højreskiftoperator:
a >> b
Hvor -en er operanden for den rigtige skifteoperatør, og b er antallet af bits operatøren vil flytte operanden med.
Den fortegnsudbredende højreskifteoperatør fungerer på samme måde som venstreskiftsoperatøren; den eneste forskel i driftsmåden er, at højre skift fastholder skiltet.
For eksempel:
lade a = -50; // 11001110
lade b = 2;lade resultat = a >> b; // 11110011
konsol.log (resultat); // -13
I eksemplet ovenfor flyttede den højre skiftoperator decimaltallet -50 (11001110) to mellemrum til højre, hvilket resulterede i decimaltallet -13 (11110011).
Usigneret højreskift (>>>) Operatør
Det usignerede højreskift (>>>) operatør flytter bits af et tal til højre med et specificeret antal positioner og udfylder de tomme pladser til venstre med nuller. Operatøren kasserer overskydende bits, som den flytter fra til højre.
Her er syntaksen for den usignerede højreskiftoperator:
a >>> b
Hvor -en er operanden for den rigtige skifteoperatør, og b er antallet af bits operatøren vil flytte operanden med.
Den usignerede højreskifteoperatør fungerer på samme måde som det højre skift. Men i modsætning til den højre skiftefører (>>), bevarer den ikke tegnet for et tal, når der skiftes. I stedet behandler den tallet som et heltal uden fortegn og udfylder biten længst til venstre med et nul.
For eksempel:
lade a = -5; // 11111111 11111111 11111111 11111011
lade b = 2;lade resultat = a >>> b; // 00111111 11111111 11111111 11111110
konsol.log (resultat); // 1073741822
I dette eksempel flyttede den usignerede højreskifter "-5" to mellemrum til højre, hvilket effektivt fjernede tegnet og resulterede i decimalen "1073741822".
Applikationerne af Bitwise Operators
Ved at manipulere individuelle bits i binære tal kan bitvise operatorer skabe kompleks funktionalitet, som ellers er svær eller umulig at opnå med traditionelle aritmetiske operationer.
Forståelse af, hvordan du bruger bitvise operatører, kan hjælpe dig med at bygge mere effektive og mere effektive webapplikationer.