Gli operatori bit a bit sono comodi da usare e possono generare un codice velocissimo. Scopri cosa sono e come usarli.
Gli operatori bit per bit sono quelli che agiscono a livello binario. Spesso sono molto veloci da eseguire e in genere agiscono su due operandi.
È possibile utilizzare operatori bit per bit per manipolare numeri binari, ottimizzare il codice, comprimere i dati e implementare tecniche per la grafica o la programmazione di giochi. Come la maggior parte degli altri linguaggi di programmazione, JavaScript ha un eccellente supporto per le operazioni bit a bit.
Cosa sono gli operatori?
La maggior parte dei linguaggi di programmazione utilizza il concetto di "operatore", un simbolo che indica all'interprete di eseguire una specifica operazione matematica, relazionale o logica.
Ci sono molti diversi tipi di operatore JavaScript dovresti essere a conoscenza, da quelli che sembrano operatori matematici standard, come "+", agli operatori che confrontano due valori. Gli operatori bit a bit sono un set speciale che si occupa di numeri binari.
Operatore AND (&) bit a bit
JavaScript AND bit a bit (&) confronta i bit corrispondenti di due operandi binari: numeri che contengono solo 0 e 1. Per ogni coppia di bit di ingresso, il bit di uscita corrispondente è "1" se entrambi i bit di ingresso sono "1" o "0" altrimenti.
Ecco la sintassi dell'operatore AND bit a bit:
a & b
In questo esempio, UN E B sono gli operandi su cui si sta eseguendo l'operazione bit a bit.
Ecco come funziona l'operatore AND bit a bit:
- L'operazione AND si applica a ciascuna coppia di bit corrispondenti in UN E B da destra a sinistra.
- Se entrambi i bit sono 1, il risultato è 1. Se uno dei bit è 0, il risultato è 0.
- Il risultato è un nuovo numero in cui ogni bit rappresenta il risultato dell'operazione AND sui bit corrispondenti di UN E B.
Per esempio:
permettere un = 50; // 00110010
permettere b = 100; // 01100100permettere risultato = a & b; // 00100000
consolare.log (risultato); // 32
Nell'esempio sopra, UN è 50 in decimale, equivalente al numero binario 00110010, e B è 100 in decimale, equivalente al numero binario 01100100. L'operatore AND confronta ciascuna coppia di bit corrispondenti da destra a sinistra e produce il numero binario risultante 00100000, che è 32 in decimale.
Operatore OR bit a bit (|).
L'OR bit a bit (|) confronta i bit corrispondenti di due operandi e restituisce "1" se uno o entrambi i bit sono "1" e "0" se entrambi i bit sono "0".
Ecco la sintassi dell'operatore OR bit a bit:
un | B
Dove UN E B sono gli operandi dell'operazione.
L'operatore OR bit per bit (|) funziona allo stesso modo dell'operatore AND bit per bit. L'unica differenza è che l'operatore OR restituisce "1" se "uno" dei bit è "1" e "0" se "entrambi" i bit sono "0".
Per esempio:
permettere un = 50; // 00110010
permettere b = 100; // 01100100permettere risultato = a | B; // 01110110
consolare.log (risultato); // 118
Nell'esempio precedente, l'operatore OR bit per bit confronta ciascuna coppia di bit da destra a sinistra (ovvero, 0 | 0 = 0, 0 | 1 = 1, 1 | 1 = 1, e così via). Il numero binario risultante è 01110110, che è 118 in decimale.
Operatore XOR bit a bit (^).
L'XOR bit a bit (^) confronta i bit corrispondenti di due operandi e restituisce "1" se uno degli operandi, ma non entrambi, è "1" e "0" se entrambi gli operandi sono "1" o "0".
Ecco la sintassi dell'operatore XOR bit a bit:
un ^ b
Dove UN E B sono gli operandi dell'operazione.
L'operatore XOR bit per bit funziona allo stesso modo degli operatori OR bit per bit e AND. L'unica differenza è che restituisce "1" se "uno ma non entrambi" degli operandi è "1" e "0" se "entrambi" degli operandi sono "1" o "0".
Per esempio:
permettere un = 50; // 00110010
permettere b = 100; // 01100100permettere risultato = a ^ b; // 01010110
consolare.log (risultato); // 86
Nell'esempio precedente, l'operatore XOR confronta ciascuna coppia di bit da destra a sinistra (ovvero, 0 ^ 0 = 0, 0 ^ 1 = 1, 1 ^ 1 = 0, e così via). Il numero binario risultante è 01010110, che è 86 in decimale.
Operatore NOT (~) bit a bit
Il NOT bit a bit (~) è un operatore unario che opera su un singolo numero intero invertendo tutti i suoi bit. In altre parole, cambia ogni bit "0" in "1" e ogni bit "1" in "0".
Ecco la sintassi dell'operatore NOT bit a bit:
~ c
Dove C è l'operando.
L'operatore NOT bit per bit funziona invertendo tutti i bit di un operando, inclusi i bit di segno.
Per esempio:
permettere c = 10; // 00001010
permettere d = -10; // 11110110
consolare.log(~c); // 11110101
consolare.log(~d); // 00001001
Nell'esempio precedente, l'operatore NOT inverte tutti i bit (ovvero, 0 → 1, 1 → 0, ecc.), compresi i bit di segno.
Operatore Shift sinistro (<
L'operatore di spostamento a sinistra sposta i bit di un dato numero a sinistra. L'operatore accetta due operandi: il numero da spostare e il numero di bit di cui spostarlo.
Ecco la sintassi per l'operatore di spostamento a sinistra:
a << b
Dove UN è l'operando per l'operatore di spostamento a sinistra, e B è il numero di bit di cui l'operatore sposterà l'operando.
L'operatore di spostamento a sinistra funziona spostando ogni bit di un operando a sinistra del numero specificato di posizioni e scartando i bit in eccesso spostati a sinistra.
Per esempio:
permettere un = 50; // 00110010
permettere b = 2;permettere risultato = a << b; // 11001000
consolare.log (risultato); // 200
Nell'esempio precedente, l'operatore di spostamento a sinistra ha spostato di due posizioni il decimale 50 del binario 00110010. Il valore binario risultante è 11001000, che è 200 come decimale.
Operatore Right Shift (>>) di propagazione del segno
Lo spostamento a destra che propaga il segno (>>) sposta a destra i bit di un numero conservando il segno del numero originale. L'operatore accetta due operandi: il numero da spostare e il numero di bit di cui spostarlo.
Ecco la sintassi per l'operatore di spostamento a destra che propaga il segno:
un >> b
Dove UN è l'operando per l'operatore di spostamento a destra, e B è il numero di bit di cui l'operatore sposterà l'operando.
L'operatore di spostamento a destra che propaga il segno funziona in modo simile all'operatore di spostamento a sinistra; l'unica differenza nella modalità di funzionamento è che lo spostamento a destra mantiene il segno.
Per esempio:
permettere un = -50; // 11001110
permettere b = 2;permettere risultato = a >> b; // 11110011
consolare.log (risultato); // -13
Nell'esempio precedente, l'operatore di spostamento a destra ha spostato il decimale -50 (11001110) di due spazi a destra, ottenendo il decimale -13 (11110011).
Operatore Right Shift (>>>) senza segno
Lo spostamento a destra senza segno (>>>) sposta i bit di un numero a destra di un numero specificato di posizioni e riempie gli spazi vuoti a sinistra con zeri. L'operatore scarta i bit in eccesso che sposta a destra.
Ecco la sintassi per l'operatore di spostamento a destra senza segno:
a >>> b
Dove UN è l'operando per l'operatore di spostamento a destra, e B è il numero di bit di cui l'operatore sposterà l'operando.
L'operatore di spostamento a destra senza segno funziona in modo simile allo spostamento a destra. Tuttavia, a differenza dell'operatore di spostamento a destra (>>), non conserva il segno di un numero durante lo spostamento. Al contrario, tratta il numero come un numero intero senza segno e riempie il bit più a sinistra con uno zero.
Per esempio:
permettere un = -5; // 11111111 11111111 11111111 11111011
permettere b = 2;permettere risultato = a >>> b; // 00111111 11111111 11111111 11111110
consolare.log (risultato); // 1073741822
In questo esempio, l'operatore di spostamento a destra senza segno ha spostato "-5" di due spazi a destra, rimuovendo di fatto il segno e risultando nel decimale "1073741822".
Le applicazioni degli operatori bit a bit
Manipolando singoli bit in numeri binari, gli operatori bit a bit possono creare funzionalità complesse altrimenti difficili o impossibili da ottenere con le operazioni aritmetiche tradizionali.
Comprendere come utilizzare gli operatori bit per bit può aiutarti a creare applicazioni Web più efficienti e performanti.