Bitvise operatører er praktiske å bruke og kan resultere i blemmer rask kode. Finn ut hva de er og hvordan du bruker dem.

Bitvise operatorer er de som virker på et binært nivå. De er ofte veldig raske å utføre og handler vanligvis på to operander.

Du kan bruke bitvise operatorer til å manipulere binære tall, optimalisere kode, komprimere data og implementere teknikker for grafikk eller spillprogrammering. Som de fleste andre programmeringsspråk har JavaScript utmerket støtte for bitvise operasjoner.

Hva er operatører?

De fleste programmeringsspråk bruker konseptet en "operatør" - et symbol som forteller tolken å utføre en spesifikk matematisk, relasjonell eller logisk operasjon.

Det er mange forskjellige typer JavaScript-operatører du bør være oppmerksom på, fra de som ser ut som standard matematiske operatorer, for eksempel "+", til operatorer som sammenligner to verdier. Bitvise operatorer er et spesielt sett som omhandler binære tall.

Bitvis OG (&) Operator

JavaScript bitvis OG (&) operatør sammenligner de tilsvarende bitene av to

instagram viewer
binære operander - tall som bare inneholder 0 og 1. For hvert par inngangsbiter er den tilsvarende utgangsbiten "1" hvis begge inngangsbitene er "1" eller "0" ellers.

Her er syntaksen til den bitvise AND-operatoren:

a & b

I dette eksemplet, en og b er operandene du utfører den bitvise operasjonen på.

Slik fungerer den bitvise AND-operatoren:

  1. OG-operasjonen gjelder for hvert par av tilsvarende biter i en og b fra høyre til venstre.
  2. Hvis begge bitene er 1, er resultatet 1. Hvis en av bitene er 0, er resultatet 0.
  3. Resultatet er et nytt tall der hver bit representerer resultatet av OG-operasjonen på de tilsvarende bitene til en og b.

For eksempel:

la a = 50; // 00110010
la b = 100; // 01100100

la resultat = a & b; // 00100000

konsoll.log (resultat); // 32

I eksemplet ovenfor, en er 50 i desimal, tilsvarende det binære tallet 00110010, og b er 100 i desimal, tilsvarende det binære tallet 01100100. OG-operatoren sammenligner hvert par av tilsvarende biter fra høyre til venstre og produserer det resulterende binære tallet 00100000, som er 32 i desimal.

Bitvis ELLER (|) Operator

Den bitvise ELLER (|) operator sammenligner de tilsvarende bitene til to operander og returnerer "1" hvis en eller begge bitene er "1" og "0" hvis begge bitene er "0".

Her er syntaksen til den bitvise OR-operatoren:

en | b

Hvor en og b er operandene til operasjonen.

Den bitvise OR (|)-operatoren fungerer på samme måte som den bitvise AND-operatoren. Den eneste forskjellen er at OR-operatøren returnerer "1" hvis "enten" av bitene er "1" og "0" hvis "begge" bitene er "0".

For eksempel:

la a = 50; // 00110010
la b = 100; // 01100100

la resultat = a | b; // 01110110

konsoll.log (resultat); // 118

I eksemplet ovenfor sammenligner den bitvise OR-operatoren hvert par av biter fra høyre til venstre (dvs. 0 | 0 = 0, 0 | 1 = 1, 1 | 1 = 1, og så videre). Det resulterende binære tallet er 01110110, som er 118 i desimal.

Bitvis XOR (^) Operator

Den bitvise XOR (^) operator sammenligner de tilsvarende bitene av to operander og returnerer "1" hvis en av operandene, men ikke begge, er "1" og "0" hvis begge operandene er "1" eller "0".

Her er syntaksen til den bitvise XOR-operatoren:

a ^ b

Hvor en og b er operandene til operasjonen.

Den bitvise XOR-operatoren fungerer på samme måte som de bitvise OR- og AND-operatorene. Den eneste forskjellen er at den returnerer "1" hvis "enten men ikke begge" av operandene er "1" og "0" hvis "begge" av operandene er "1" eller "0".

For eksempel:

la a = 50; // 00110010
la b = 100; // 01100100

la resultat = a ^ b; // 01010110

konsoll.log (resultat); // 86

I eksemplet ovenfor sammenligner XOR-operatøren hvert par av biter fra høyre til venstre (dvs. 0 ^ 0 = 0, 0 ^ 1 = 1, 1 ^ 1 = 0, og så videre). Det resulterende binære tallet er 01010110, som er 86 i desimal.

Bitvis IKKE (~) Operatør

Den bitvise IKKE (~) operator er en unær operator som opererer på et enkelt heltall ved å invertere alle bitene. Med andre ord endres hver "0"-bit til "1" og hver "1"-bit til "0".

Her er syntaksen til den bitvise NOT-operatoren:

~c

Hvor c er operanden.

Den bitvise NOT-operatoren fungerer ved å invertere alle bitene i en operand, inkludert fortegnsbitene.

For eksempel:

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

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

I eksemplet ovenfor inverterer NOT-operatoren alle bitene (dvs. 01, 10osv.), inkludert skiltbitene.

Venstre Shift (<

Venstre skiftoperatør flytter bitene til et gitt tall til venstre. Operatøren tar to operander: tallet som skal skiftes og antall biter det skal skiftes etter.

Her er syntaksen for venstreskiftoperatøren:

a << b

Hvor en er operanden for venstre skiftoperatør, og b er antall biter operatøren vil forskyve operanden med.

Venstre skiftoperatør fungerer ved å forskyve hver bit av en operand til venstre med det angitte antall posisjoner og forkaste de overskytende bitene som er forskjøvet til venstre.

For eksempel:

la a = 50; // 00110010
la b = 2;

la resultat = a << b; // 11001000

konsoll.log (resultat); // 200

I eksemplet ovenfor flyttet venstreskiftoperatøren desimalen 50 av binær 00110010 med to plasser. Den resulterende binære verdien er 11001000, som er 200 som en desimal.

Skilt-propagerende høyreskift (>>) Operatør

Det fortegnsforplantende høyreskiftet (>>) flytter bitene til et tall til høyre mens fortegnet til det opprinnelige tallet bevares. Operatøren tar to operander: tallet som skal skiftes og antall biter det skal skiftes etter.

Her er syntaksen for den fortegnsforplantende høyreskiftoperatoren:

a >> b

Hvor en er operanden for høyre skiftoperatør, og b er antall biter operatøren vil forskyve operanden med.

Den tegn-forplantende høyre skiftoperatøren fungerer på samme måte som venstre skiftoperatør; den eneste forskjellen i driftsmåten er at høyre skift opprettholder skiltet.

For eksempel:

la a = -50; // 11001110
la b = 2;

la resultat = a >> b; // 11110011

konsoll.log (resultat); // -13

I eksemplet ovenfor flyttet den høyre skiftoperatøren desimalen -50 (11001110) to mellomrom til høyre, noe som resulterte i desimalen -13 (11110011).

Usignert Høyre Shift (>>>) Operatør

Det usignerte høyre skiftet (>>>)-operatoren flytter bitene til et tall til høyre med et spesifisert antall posisjoner og fyller de tomme plassene til venstre med nuller. Operatøren kaster overflødig bits som den flytter av til høyre.

Her er syntaksen for den usignerte høyreskiftoperatøren:

a >>> b

Hvor en er operanden for høyre skiftoperatør, og b er antall biter operatøren vil forskyve operanden med.

Den usignerte høyre skiftoperatøren fungerer på samme måte som høyre skift. Imidlertid, i motsetning til høyre skiftoperatør (>>), den bevarer ikke tegnet til et tall når du skifter. I stedet behandler den tallet som et heltall uten fortegn og fyller biten lengst til venstre med en null.

For eksempel:

la a = -5; // 11111111 11111111 11111111 11111011
la b = 2;

la resultat = a >>> b; // 00111111 11111111 11111111 11111110

konsoll.log (resultat); // 1073741822

I dette eksemplet flyttet den usignerte høyreskiftoperatøren "-5" to mellomrom til høyre, noe som effektivt fjernet tegnet og resulterte i desimalen "1073741822".

Applikasjonene til Bitwise-operatører

Ved å manipulere individuelle biter i binære tall, kan bitvise operatører skape kompleks funksjonalitet som ellers er vanskelig eller umulig å oppnå med tradisjonelle aritmetiske operasjoner.

Å forstå hvordan du bruker bitvise operatører kan hjelpe deg med å bygge mer effektive og mer effektive nettapplikasjoner.