per la spiegazione vedi C# - operatori - sui bit (logici)

Operatore Descrizione espressione Cosa restituisce
&and
'bit a bit'
x & yil valore determinato dall'operazione di and tra i bit di x e y
è sufficiente che uno dei due operandi valga 0 per avere come risultato 0
|or
'bit a bit'
x | yil valore determinato dall'operazione di or tra i bit di x e y
se uno dei due bit o entrambi é 1 allora uguale a 1
^xor
'bit a bit'
x ^ yil valore determinato dall'operazione di xor tra i bit di x e y
ritorna 1 solo se uno degli operandi è 1 e l'altro è 0
>>
<<
shift destro
(o sinistro) con segno
x << ysposta i bit della variabile x verso destra (o sinistra) di y posizioni, preservando il bit di segno
lo slittamento a sinistra prevede l'inserimento di bit 0 in coda
lo slittamento a destra le cose cambiano perché coinvolge l'ultimo bit che è speciale, in quanto rappresenta il segno
>>>shift destro senza segnox >>> ysposta i bit della variabile x verso destra di y posizioni
senza considerare il bit di segno (vengono aggiunti sempre 0 a sinistra)
~complemento~xinverte tutti i bit della variabile x (gli 0 diventano 1 e viceversa)


esempio:
int test = 53; // 00110101

System.out.println("Test 1: " + (((test & 1) >0) ? "Sì" : "No")); // 00000001
System.out.println("Test 2: " + (((test & 2) >0) ? "Sì" : "No")); // 00000010
System.out.println("Test 3: " + (((test & 4) >0) ? "Sì" : "No")); // 00000100
System.out.println("Test 4: " + (((test & 8) >0) ? "Sì" : "No")); // 00001000
System.out.println("Test 5: " + (((test & 16) >0) ? "Sì" : "No")); // 00010000
System.out.println("Test 6: " + (((test & 32) >0) ? "Sì" : "No")); // 00100000
System.out.println("Test 7: " + (((test & 64) >0) ? "Sì" : "No")); // 01000000
System.out.println("Test 8: " + (((test & 128) >0) ? "Sì" : "No")); // 10000000


Test 1: Sì
Test 2: No
Test 3: Sì
Test 4: No
Test 5: Sì
Test 6: Sì
Test 7: No
Test 8: No