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.
