17 aprile 2025
Gli operatori bitwise permettono di effettuare calcoli al livello dei bit delle variabili.
Gli operatori bitwise in C sono:
&
AND|
OR^
XOR~
NOT<<
Shift a sinistra>>
Shift a destraQuesti operatori applicano le regole dell’algebra booleana, pertanto sarà importante conoscere le tabelle di verità delle operazioni AND, OR e XOR.
A | B | A and B | A or B | A ^ B | ~A |
---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 1 |
0 | 1 | 0 | 1 | 1 | 1 |
1 | 0 | 0 | 1 | 1 | 0 |
1 | 1 | 1 | 1 | 0 | 0 |
Per effettuare le operazioni bitwise conviene sempre cercare di rappresentare i numeri in binario.
C permette di dichiarare numeri in binario utilizzando il prefisso 0b
:
L’operatore OR viene spesso usato per unire due insiemi di bit. Ad esempio, se si ha una variabile switches
che rappresenta lo stato di accensione di 8 interruttori, si può accendere un interruttore utilizzando l’operatore OR:
Ora il valore di switches
sarà 0b00001100
. Il che rappresenta il fatto che gli interruttori 3 e 4 sono accesi.
Per spegnere tutti gli interruttori si può utilizzare l’operatore AND:
Scrivere un programma che stampi a monitor il valore del bit meno significativo di un numero intero.
Scrivere una funzione che dato un numero intero \(n\), restituisca true se \(n\) è pari, false altrimenti. Usare l’operatore AND per verificare se un numero è pari.
L’operatore XOR è molto utile per invertire lo stato di un bit.
65: 0b01000001
73: 0b01001001
08: 0b00001000
65 ^ 73 = 8
8 ^ 73 = 65
'A' ^ 'I' = '\b'
(man ascii)
Scrivere un programma di semplice crittografia in grado di cifrare e decifrare una stringa utilizzando l’operatore XOR.
Gli operatori di shift permettono di spostare i bit di una variabile a sinistra o a destra.
Scrivere un programma che moltiplichi un numero intero per 2 utilizzando l’operatore di shift.
Scrivere un programma che stampi a monitor la codifica in binario di un unsigned char.
Ad esempio, se il valore di c
è 5, il programma dovrà stampare 00000000 00000000 00000000 00000101
.
Immaginando che una serie di 8 bit rappresenti lo stato di accensione di 8 led, scrivere un programma che:
Le liste doppiamente concatenate sono una struttura dati che permette di memorizzare una sequenza di nodi, in cui ogni nodo contiene un puntatore al nodo successivo e un puntatore al nodo precedente. In questo modo è possibile navigare la lista in entrambe le direzioni.
Nei sistemi con poca disponibilità di memoria, è possibile implementare una lista doppiamente concatenata utilizzando l’operatore XOR. In questo modo si può risparmiare memoria, poiché non è necessario memorizzare i puntatori next
e prev
per ogni nodo.
Vedi un esempio di implementazione di una lista doppiamente concatenata usando XOR.
Dati e Algoritmi