possono essere utilizzati sulle variabili:

operatori:

OR / AND / XOR
i tre operatori funzionano come gli operatori logici solo che agiscono sul singolo bit

OR |
se uno dei due bit o entrambi é 1 allora uguale a 1
int a=147; 1 0 0 1 0 0 1 1
int b=97; 0 1 1 0 0 0 0 1
int c=a|b; = 243 1 1 1 1 0 0 1 1

AND &
solo se entrambi i bit sono 1 uguale a 1
int a=147; 1 0 0 1 0 0 1 1
int b=97; 0 1 1 0 0 0 0 1
int c=a&b; = 1 0 0 0 0 0 0 0 1


& é usato anche nei puntatori e nelle istruzioni di inserimento per assegnare l'indirizzo di memoria

XOR ^
come OR ma se entrambi sono 1 allora uguale 0
int a=147; 1 0 0 1 0 0 1 1
int b=97; 0 1 1 0 0 0 0 1
int c=a^b; = 232 1 1 1 1 0 0 1 0


scorrimenti (shift)
l'operatore fa scorrere a destra o sinistra i bit di un numero di posizioni specificato.

scorrimento sinistra <<
saranno aggiunti dei 0 nei posti vuoti a destra, i bit usciti andranno persi.
int a=42; 0 0 1 0 1 0 1 0
int c=a<<1 = 84 0 1 0 1 0 1 0 0


scorrimento destra >>
saranno aggiunti dei 0 o 1 nei posti vuoti a sinistra a seconda se valore del primo bit sia 0 o 1, i bit usciti andranno persi.
caso con 0 (aggiunta di bit 0 a sinistra)
int a=43; 0 0 1 0 1 0 1 1
int c=a>>1 = 21 0 0 0 1 0 1 0 1

caso con 1 (aggiunta di bit 1 a sinistra)
int a=-86; 1 0 1 0 1 0 1 0
int c=a>>1 = -43 1 1 0 1 0 1 0 1

funziona così per mantenere lo stesso segno del valore dopo lo scorrimento, il primo bit indica il segno (modulo 2)

se si vuole fare uno scorrimento a destra di un valore negativo, quindi con il primo bit 1, ed obbligare il computer ad inserire bit 0 invece che 1 all'inizio del byte, bisogna indicare la variabile come unsigned , così il primo bit non indicherà più il segno come previsto dal modulo 2, ma un valore


complemento a uno
inverte i bit, ovvero trasforma gli 1 in 0 e gli 0 in 1
i=10; 0 0 0 0 1 0 1 0
j =~i;= 245 1 1 1 1 0 1 0 1