Gli operatori bitwise di Java
Gli operatori per lavorare sui bit tramite Java sono i seguenti:
& | AND bitwise | A&B |
| | OR bitwise | A|B |
^ | XOR bitwise | A^B |
~ | NOT bitwise | A~ |
&= | AND bitwise con assegnazione | A&=B |
|= | OR bitwise con assegnazione | A|=B |
^= | XOR bitwise con assegnazione | A^=B |
>> | sposta n bit a destra con estensione | A>>n |
>>= | sposta n bit a destra con estensione e assegna | A>>=n |
<< | sposta bit a sinistra | A<<n |
<<= | sposta bit a sinistra e assegna | A<<=n |
>>> | sposta bit a destra senza segno | A>>>n |
>>>= | sposta bit a destra senza segno e assegna | A>>>=n |
Esempi pratici
Per ciascun esempio ho aggiunto una spiegazione del funzionamento.
Tutto ciò che ho scritto dopo i simboli // è soltanto un commento, dove ho indicato la conversione binaria del numero decimale.
Esempio 1 ( AND )
L'operatore AND bitwise & effettua il prodotto logico dei bit
int a=60 // = 0011 1100
int b=13 // = 0000 1101
c=a&b // = 0000 1100 ossia c=12
Esempio 2 ( OR )
L'operatore OR bitwise | effettua la somma logica dei bit
int a=60 // = 0011 1100
int b=13 // = 0000 1101
c=a|b // = 0011 1101 ossia c=61
Esempio 3 ( XOR )
L'operatore XOR bitwise ^ effettua la disgiunzione logica esclusiva dei bit
int a=60 // = 0011 1100
int b=13 // = 0000 1101
c=a|b // = 0011 0001 ossia c=49
Esempio 4 ( NOT )
L'operatore NOT bitwise ~ esegue la negazione dei bit
int a=60 // = 0011 1100
c=~a // = 1100 0011 ossia c=-61
Esempio 5 ( << )
L'operatore shift << scorre n bit a sinistra.
Gli spazi vuoti a destra sono riempiti con degli zeri, mentre quelli che escono a sinistra sono eliminati.
int a=60 // = 0011 1100
c=a<<2 // = 1111 0000 ossia c=240
Esempio 6 ( >> )
L'operatore shift >> scorre n bit a destra.
Gli spazi vuoti a sinistra sono riempiti con degli zeri mentre quelli che escono a destra sono eliminati.
int a=60 // = 0011 1100
c=a>>2 // = 0000 1111 ossia c=15
Esempio 6 ( >>> ) con segno
L'operatore shift >>> con segno sposta i bit a destra di n posizioni.
In questo caso, i bit vuoti sono riempiti con zero (0) se il numero è positivo, oppure con uno (1) se il numero è negativo. Gli altri che escono sono eliminati.
int a=60 // = 0011 1100
c=a>>>2 // = 0000 1111 ossia c=15
Nei numeri positivi il primo bit a sinistra è zero (0) mentre in quelli negativi è uno (1).
Per questa ragione gli spazi vuoti a sinistra sono riempiti rispettivamente con zero o uno.