Operatori bit JavaScript

Operatori bit JavaScript

Operatore Nome Descrizione
& AND Imposta ogni bit a 1 se entrambi i bit sono 1
| OR Imposta ogni bit a 1 se uno dei due bit è 1
^ XOR Imposta ogni bit a 1 se uno dei due bit è 1
~ NOT Inversione di tutti i bit
<< Spostamento a sinistra con riempimento zero Spostamento a sinistra con riempimento zero, facendo cadere il bit più a sinistra.
>> Spostamento a destra con segno Spostamento a destra con copia del bit più a sinistra, facendo cadere il bit più a destra.
>>> Spostamento a destra con riempimento zero Spostamento a destra con riempimento zero, facendo cadere il bit più a destra.

Esempio

Operazione Risultato è equivalente Risultato
5 & 1 1 0101 & 0001 0001
5 | 1 5 0101 | 0001 0101
5 ^ 1 4 0101 ^ 0001 0100
~ 5 10 ~0101 1010
5 << 1 10 0101 << 1 1010
5 >> 1 2 0101 >> 1 0010
5 >>> 1 2 0101 >>> 1 0010

JavaScript utilizza numeri bitwise a 32 bit

JavaScript memorizza i numeri come numeri a virgola mobile a 64 bit, ma tutte le operazioni bitwise vengono eseguite con numeri binari a 32 bit.

Prima di eseguire l'operazione bitwise, JavaScript converte il numero in un intero a segno di 32 bit.

Dopo aver eseguito l'operazione bitwise, il risultato viene convertito in un numero JavaScript a 64 bit.

Gli esempi sopra utilizzano 4 bit binari senza segno. Quindi ~ 5 restituisce 10.

Poiché JavaScript utilizza 32 bit di interi a segno, JavaScript restituirà -6.

00000000000000000000000000000101 (5)

11111111111111111111111111111010 (~5 = -6)

Gli interi a segno utilizzano il bit più a sinistra come segno.

Operazione bitwise AND

Quando si esegue un'operazione bitwise AND su un paio di bit, se i bit sono tutti 1 viene restituito 1.

Esempio a unità:

Operazione Risultato
0 & 0 0
0 & 1 0
1 & 0 0
1 & 1 1

Esempio a 4 bit:

Operazione Risultato
1111 & 0000 0000
1111 & 0001 0001
1111 & 0010 0010
1111 & 0100 0100

Operazione bitwise OR

Quando si esegue un'operazione bitwise OR su un paio di bit, se uno dei bit è 1 viene restituito 1:

Esempio a unità

Operazione Risultato
0 | 0 0
0 | 1 1
1 | 0 1
1 | 1 1

Esempio a 4 bit:

Operazione Risultato
1111 | 0000 1111
1111 | 0001 1111
1111 | 0010 1111
1111 | 0100 1111

Operazione bitwise XOR

Quando si esegue un'operazione bitwise XOR su un paio di bit, se i bit sono diversi viene restituito 1:

Esempio a unità:

Operazione Risultato
0 ^ 0 0
0 ^ 1 1
1 ^ 0 1
1 ^ 1 0

Esempio a 4 bit:

Operazione Risultato
1111 ^ 0000 1111
1111 ^ 0001 1110
1111 ^ 0010 1101
1111 ^ 0100 1011

Operazione bitwise AND (&) in JavaScript

Se i bit sono tutti 1, l'operazione bitwise AND restituisce 1:

Decimale Binario
5 00000000000000000000000000000101
1 00000000000000000000000000000001
5 & 1 00000000000000000000000000000001 (1)

Esempio

var x = 5 & 1;

Prova tu stesso

Operazione bitwise OR (|) in JavaScript

Se uno dei bit è 1, l'operazione OR restituisce 1:

Decimale Binario
5 00000000000000000000000000000101
1 00000000000000000000000000000001
5 | 1 00000000000000000000000000000101 (5)

Esempio

var x = 5 | 1;

Prova tu stesso

Operazione XOR (^) in JavaScript

Se i bit sono diversi, XOR restituisce 1:

Decimale Binario
5 00000000000000000000000000000101
1 00000000000000000000000000000001
5 ^ 1 00000000000000000000000000000100 (4)

Esempio

var x = 5 ^ 1;

Prova tu stesso

Operazione NOT (~) in JavaScript

Decimale Binario
5 00000000000000000000000000000101
~5 11111111111111111111111111111010 (-6)

Esempio

var x = ~5;

Prova tu stesso

Shift a sinistra (<< con riempimento di zero) in JavaScript

Questo è lo shift a sinistra con riempimento di zero. Un o più bit zero vengono spostati da destra, e il bit più a sinistra viene eliminato:

Decimale Binario
5 00000000000000000000000000000101
5 << 1 00000000000000000000000000001010 (10)

Esempio

var x = 5 << 1;

Prova tu stesso

Shift a destra (>> con segno) in JavaScript

Questo è lo shift a destra con segno. Il bit più a sinistra viene spostato da sinistra, e il bit più a destra viene eliminato:

Decimale Binario
-5 11111111111111111111111111111011
-5 >> 1 11111111111111111111111111111101 (-3)

Esempio

var x = -5 >> 1;

Prova tu stesso

Shift a destra (>>> con riempimento di zero) in JavaScript

Questo è lo shift a destra con riempimento di zero. Un o più bit zero vengono spostati da sinistra, e il bit più a destra viene eliminato:

Decimale Binario
5 00000000000000000000000000000101
5 >>> 1 00000000000000000000000000000010 (2)

Esempio

var x = 5 >>> 1;

Prova tu stesso

Interi a 32 bit con segno (numero binario)

È facile comprendere un intero a 32 bit con un solo bit impostato:

Rappresentazione binaria Valore decimale
00000000000000000000000000000001 1
00000000000000000000000000000010 2
00000000000000000000000000000100 4
00000000000000000000000000001000 8
00000000000000000000000000010000 16
00000000000000000000000000100000 32
00000000000000000000000001000000 64

Aggiungere più posizioni numeriche rivelano il modello binario:

Rappresentazione binaria Valore decimale
00000000000000000000000000000101 5 (4 + 1)
00000000000000000000000000101000 40 (32 + 8)
00000000000000000000000000101101 45 (32 + 8 + 4 + 1)

I numeri negativi sono il complemento a uno del numero positivo più 1:

Rappresentazione binaria Valore decimale
00000000000000000000000000000101 5
11111111111111111111111111111011 -5
00000000000000000000000000101000 40
11111111111111111111111111011000 -40
11111111111111111111111111011001 -41

Convertire decimale in binario

Esempio

function dec2bin(dec){
    return (dec >>> 0).toString(2);
}

Prova tu stesso

Convertire binario in decimale

Esempio

function bin2dec(bin){
    return parseInt(bin, 2).toString(10);
}

Prova tu stesso