Operatorii pe biți sunt convenabil de utilizat și pot avea ca rezultat codul rapid. Aflați ce sunt și cum să le folosiți.

Operatorii pe biți sunt cei care acționează la nivel binar. Ele sunt adesea foarte rapide de executat și de obicei acționează pe doi operanzi.

Puteți folosi operatori pe biți pentru a manipula numere binare, a optimiza codul, a comprima datele și a implementa tehnici pentru grafică sau programare de jocuri. La fel ca majoritatea altor limbaje de programare, JavaScript are suport excelent pentru operațiuni pe biți.

Ce sunt operatorii?

Majoritatea limbajelor de programare folosesc conceptul de „operator” – un simbol care îi spune interpretului să efectueze o anumită operație matematică, relațională sau logică.

Există multe diferite tipuri de operator JavaScript ar trebui să știți, de la cei care arată ca operatori matematici standard, cum ar fi „+”, până la operatorii care compară două valori. Operatorii pe biți sunt un set special care se ocupă de numere binare.

Operator AND (&) pe biți

instagram viewer

ȘI pe biți JavaScript (&) operatorul compară biții corespunzători a doi operanzi binari - numere care conțin doar 0 și 1. Pentru fiecare pereche de biți de intrare, bitul de ieșire corespunzător este „1” dacă ambii biți de intrare sunt „1” sau „0” în caz contrar.

Iată sintaxa operatorului AND pe biți:

a & b

În acest exemplu, A și b sunt operanzii pe care efectuați operația pe biți.

Iată cum funcționează operatorul AND pe biți:

  1. Operația AND se aplică fiecărei perechi de biți corespunzători în A și b de la dreapta la stânga.
  2. Dacă ambii biți sunt 1, rezultatul este 1. Dacă oricare dintre biți este 0, rezultatul este 0.
  3. Rezultatul este un număr nou în care fiecare bit reprezintă rezultatul operației AND pe biții corespunzători ai A și b.

De exemplu:

lăsa a = 50; // 00110010
lăsa b = 100; // 01100100

lăsa rezultat = a & b; // 00100000

consolă.log (rezultat); // 32

În exemplul de mai sus, A este 50 în zecimală, echivalent cu numărul binar 00110010 și b este 100 în zecimală, echivalent cu numărul binar 01100100. Operatorul AND compară fiecare pereche de biți corespunzători de la dreapta la stânga și produce numărul binar rezultat 00100000, care este 32 în zecimală.

Operator SAU pe biți (|).

SAU pe biți (|operatorul ) compară biții corespunzători ai doi operanzi și returnează „1” dacă unul sau ambii biți sunt „1” și „0” dacă ambii biți sunt „0”.

Iată sintaxa operatorului SAU pe biți:

a | b

Unde A și b sunt operanzii operației.

Operatorul SAU pe biți (|) funcționează în același mod ca și operatorul AND pe biți. Singura diferență este că operatorul SAU returnează „1” dacă „oricare” dintre biți este „1” și „0” dacă „ambele” biți sunt „0”.

De exemplu:

lăsa a = 50; // 00110010
lăsa b = 100; // 01100100

lăsa rezultat = a | b; // 01110110

consolă.log (rezultat); // 118

În exemplul de mai sus, operatorul SAU pe biți compară fiecare pereche de biți de la dreapta la stânga (adică, 0 | 0 = 0, 0 | 1 = 1, 1 | 1 = 1, și așa mai departe). Numărul binar rezultat este 01110110, care este 118 în zecimală.

Operator XOR pe biți (^).

XOR pe biți (^operatorul ) compară biții corespunzători ai doi operanzi și returnează „1” dacă oricare dintre operanzi, dar nu ambii, este „1” și „0” dacă ambii operanzi sunt „1” sau „0”.

Iată sintaxa operatorului XOR pe biți:

a ^ b

Unde A și b sunt operanzii operației.

Operatorul XOR pe biți funcționează în același mod ca operatorii SAU și ȘI pe biți. Singura diferență este că returnează „1” dacă „oricare, dar nu ambii” operanzi este „1” și „0” dacă „ambele” operanzi sunt „1” sau „0”.

De exemplu:

lăsa a = 50; // 00110010
lăsa b = 100; // 01100100

lăsa rezultat = a ^ b; // 01010110

consolă.log (rezultat); // 86

În exemplul de mai sus, operatorul XOR compară fiecare pereche de biți de la dreapta la stânga (adică, 0 ^ 0 = 0, 0 ^ 1 = 1, 1 ^ 1 = 0, și așa mai departe). Numărul binar rezultat este 01010110, care este 86 în zecimală.

Bitwise NOT (~) Operator

NU pe biți (~) operatorul este un operator unar care operează pe un singur întreg prin inversarea tuturor biților acestuia. Cu alte cuvinte, schimbă fiecare bit „0” în „1” și fiecare bit „1” în „0”.

Iată sintaxa operatorului NOT pe biți:

~c

Unde c este operandul.

Operatorul NOT pe biți funcționează inversând toți biții unui operand, inclusiv biții semn.

De exemplu:

lăsa c = 10; // 00001010
lăsa d = -10; // 11110110

consolă.log(~c); // 11110101
consolă.log(~d); // 00001001

În exemplul de mai sus, operatorul NOT inversează toți biții (adică, 01, 10, etc.), inclusiv biții de semn.

Operator Shift la stânga (<

Operatorul de deplasare la stânga mută biții unui număr dat la stânga. Operatorul ia doi operanzi: numărul de deplasat și numărul de biți pentru a-l deplasa.

Iată sintaxa pentru operatorul de schimbare la stânga:

a << b

Unde A este operandul pentru operatorul de deplasare la stânga și b este numărul de biți prin care operatorul va muta operandul.

Operatorul de deplasare la stânga funcționează prin deplasarea fiecărui bit al unui operand la stânga cu numărul specificat de poziții și eliminând biții în exces deplasați la stânga.

De exemplu:

lăsa a = 50; // 00110010
lăsa b = 2;

lăsa rezultat = a << b; // 11001000

consolă.log (rezultat); // 200

În exemplul de mai sus, operatorul de deplasare la stânga a deplasat zecimalul 50 al binarului 00110010 cu două locuri. Valoarea binară rezultată este 11001000, care este 200 ca zecimală.

Operator de schimbare la dreapta (>>) cu propagare a semnelor

Schimbarea spre dreapta care propagă semnul (>>) mută biții unui număr la dreapta, păstrând în același timp semnul numărului original. Operatorul ia doi operanzi: numărul de deplasat și numărul de biți pentru a-l deplasa.

Iată sintaxa pentru operatorul de deplasare la dreapta care propagă semne:

a >> b

Unde A este operandul pentru operatorul de schimbare la dreapta și b este numărul de biți prin care operatorul va muta operandul.

Operatorul de deplasare la dreapta care propagă semne funcționează similar cu operatorul de deplasare la stânga; singura diferență în modul de funcționare este că schimbarea la dreapta menține semnul.

De exemplu:

lăsa a = -50; // 11001110
lăsa b = 2;

lăsa rezultat = a >> b; // 11110011

consolă.log (rezultat); // -13

În exemplul de mai sus, operatorul de deplasare la dreapta a deplasat zecimala -50 (11001110) cu două spații la dreapta, rezultând zecimala -13 (11110011).

Schimb dreapta nesemnat (>>>) Operator

Schimbarea la dreapta nesemnată (>>>) deplasează biții unui număr la dreapta cu un număr specificat de poziții și umple spațiile goale din stânga cu zerouri. Operatorul renunță la excesul de biți pe care îi deplasează la dreapta.

Iată sintaxa pentru operatorul de schimbare la dreapta fără semn:

a >>> b

Unde A este operandul pentru operatorul de schimbare la dreapta și b este numărul de biți prin care operatorul va muta operandul.

Operatorul de schimbare la dreapta fără semnă funcționează în mod similar cu schimbarea la dreapta. Totuși, spre deosebire de operatorul de schimbare la dreapta (>>), nu păstrează semnul unui număr la deplasare. În schimb, tratează numărul ca pe un întreg fără semn și umple bitul din stânga cu un zero.

De exemplu:

lăsa a = -5; // 11111111 11111111 11111111 11111011
lăsa b = 2;

lăsa rezultat = a >>> b; // 00111111 11111111 11111111 11111110

consolă.log (rezultat); // 1073741822

În acest exemplu, operatorul de schimbare la dreapta fără semn a deplasat „-5” cu două spații la dreapta, eliminând efectiv semnul și rezultând zecimalul „1073741822”.

Aplicațiile operatorilor pe biți

Prin manipularea biților individuali în numere binare, operatorii pe biți pot crea funcționalități complexe care altfel sunt dificil sau imposibil de realizat cu operațiile aritmetice tradiționale.

Înțelegerea modului de utilizare a operatorilor pe biți vă poate ajuta să construiți aplicații web mai eficiente și mai performante.