Operatori bit per bit JavaScript (con esempi)

In questo tutorial imparerai a conoscere gli operatori bit a bit di JavaScript e i suoi tipi con l'aiuto di esempi.

Operatori bit per bit JavaScript

Gli operatori bit per bit trattano i propri operandi come un insieme di cifre binarie a 32 bit (zero e uno) ed eseguono azioni. Tuttavia, il risultato viene visualizzato come valore decimale.

Operatori Nome Esempio
& Bitwise AND x & y
| OR bit per bit x | y
^ Bitwise XOR x y
~ Bitwise NON ~x
<< Tasto maiuscolo di sinistra x << y
>> Spostamento a destra di propagazione dei segni x>> y
>>> Spostamento a destra con riempimento zero x>>> y

Nota : i numeri interi minimo e massimo rappresentabili tramite un numero con segno a 32 bit sono compresi tra -2147483648 e 2147483647.

JavaScript AND bit per bit

AND bit per bit &restituisce 1 se i bit corrispondenti di entrambi gli operandi sono 1 altrimenti restituisce 0 .

Operando 1 Operando 2 Operazione AND
0 0 0 & 0è 0
0 1 0 & 1è 0
1 0 1 & 0è 0
1 1 1 & 1è 1

Diamo un'occhiata all'operazione AND bit per bit di due interi 12 e 25 .

 In binario, 12 = 01100 25 = 11001 // Operazione AND bit per bit di 12 e 25 00001100 e 00011001 --------- 00001000 = 8 (in decimale)

Nota : la conversione di file binari da 12 a 32 bit ci dà 00000000000000000000000000001100e 2500000000000000000000000000011001. Tuttavia, abbiamo rimosso gli zeri precedenti per semplicità.

Esempio 1: operatore AND bit per bit

 // bitwise AND operator example let a = 12; let b = 25; result = a & b; console.log(result); // 8 

Nel programma sopra,

  • Il valore binario di 12 è00000000000000000000000000001100
  • Il valore binario di 25 è 00000000000000000000000000011001.
  • Quando viene eseguita l'operazione AND bit per bit , il risultato binario sarà 00000000000000000000000000001000convertito nel valore decimale 8.

JavaScript OR bit per bit

OR bit per bit |restituisce 1 se uno dei bit corrispondenti di un operando è 1 altrimenti restituisce 0 .

Operando 1 Operando 2 OPPURE Operazione
0 0 0 | 0è 0
0 1 0 | 1è 1
1 0 1 | 0è 1
1 1 1 | 1è 1

Diamo un'occhiata all'operazione OR bit per bit di due interi 12 e 25 .

In binario, 12 = 01100 25 = 11001 // Operazione OR bit per bit di 12 e 25 00001100 | 00011001 -------- 00011101 = 29 (in decimale)

Esempio 2: operatore OR bit per bit

 // bitwise OR operator example let a = 12; let b = 25; result = a | b; console.log(result); // 29

Quando viene eseguita l'operazione OR bit per bit , il risultato binario sarà 00000000000000000000000000011101convertito nel valore decimale 29.

JavaScript Bitwise XOR

Bitwise XOR ^restituisce 1 se i bit corrispondenti sono diversi e restituisce 0 se i bit corrispondenti sono gli stessi.

Operando 1 Operando 2 Operazione XOR
0 0 0 0è 0
0 1 0 1è 1
1 0 1 0è 1
1 1 1 1è 0
 In binario, 12 = 01100 25 = 11001 // Operazione XOR bit per bit di 12 e 25 00001100 00011001 -------- 00010101 = 21 (in decimale)

Esempio 3: operatore XOR bit per bit

 // bitwise XOR operator example let a = 12; let b = 25; result = a b; console.log(result); // 21

Quando viene eseguita un'operazione XOR bit per bit , il risultato binario sarà 00000000000000000000000000010101convertito nel valore decimale 21.

JavaScript Bitwise NOT

Bitwise NOT ~inverte il bit ( 0 diventa 1 , 1 diventa 0 ).

 In binario, 12 = 00000000000000000000000000001100 // Bitwise Not Operation of 12 ~ 00000000000000000000000000001100 --------------------------------- 11111111111111111111111111110011 = -13 (in decimale)

Durante la conversione 11111111111111111111111111110011in decimale, il valore sarebbe 4294967283. Ma quando si utilizza l'operatore bit a bit, il valore viene calcolato nel formato del complemento a 2 con segno tranne che per lo spostamento a destra con riempimento zero.

Il complemento di 2 viene calcolato invertendo i bit (complemento di 1) e quindi aggiungendo 1 . Per esempio,

 13 in binary: 00000000000000000000000000001101 1's complement of 13: 11111111111111111111111111110010 2's complement of 13: 11111111111111111111111111110010 +1 --------------------------------- 11111111111111111111111111110011

Notice the 2's complement of 13 (i.e. -13) is 11111111111111111111111111110011. This value is equivalent to the bitwise NOT of 12.

Example 4: Bitwise NOT Operator

 // bitwise NOT operator example let b = 12; result = ~b; console.log(result); // -13

When bitwise NOT operation is performed, the binary result will be 11111111111111111111111111110011 which converts into the decimal value -13.

Note: Bitwise NOT of a number x gives -(x + 1). Notice above ~2 gives -3.

JavaScript Left shift

Nell'operatore di spostamento a sinistra <<, l'operando a sinistra specifica il numero e l'operando a destra specifica il numero da spostare a sinistra. Zero bit vengono aggiunti a destra e bit in eccesso da sinistra vengono scartati.

Spostamento di un po 'a sinistra in JavaScript

Per esempio,

 let a = 8; let b = 1; result = a << b; // 1 ( 00000000000000000000000000010000 ) console.log(result);

JavaScript Sign-propagating right shift

Nell'operatore di spostamento a destra >>, il primo operando specifica il numero e il secondo operando specifica il numero da spostare a destra. I bit in eccesso da destra vengono scartati. Le copie del bit più a sinistra vengono spostate da sinistra, da cui il nome sign-propagating.

Spostamento di un po 'a destra con propagazione del segno riempire JavaScript

Per esempio,

 let a = 8; let b = 1; // 11111111111111111111111111111101 let c = -3; result = a>> b; result1 = c>> b; // 4 (00000000000000000000000000000100) console.log(result); // -1 (11111111111111111111111111111111) console.log(result1); 

JavaScript Zero-fill right shift

Lo >>>spostamento a destra di riempimento con zero sposta l'operando a destra riempiendo i bit di zero a sinistra. I bit in eccesso da destra vengono scartati.

Spostamento di un po 'a destra con zero riempimento in JavaScript

Per esempio,

 let a = 8; let b = 1; let c = -3; result = a>>> b; result1 = c>>> b; // 4 (00000000000000000000000000000100) console.log(result); // 1073741823 (00111111111111111111111111111111) console.log(result);

Articoli interessanti...