Sistema binario, esadecimale, bit e byte
I circuiti digitali lavorano con bit, ma per leggere registri, indirizzi, maschere e dati è utile saper passare rapidamente tra sistema binario, decimale ed esadecimale. In questa guida partiamo da bit e byte e arriviamo alle conversioni più importanti, con esempi pratici utili anche nella programmazione di Arduino e microcontrollori.
Cos’è un bit?
Il bit, abbreviazione di binary digit, è l’unità minima dell’informazione digitale. Può assumere soltanto due valori:
In un circuito elettronico questi valori vengono rappresentati tramite livelli logici LOW e HIGH. Il bit non è quindi una tensione specifica, ma uno stato logico.
Nibble, byte, word
Per rappresentare più informazioni i bit vengono raggruppati.
| Gruppo | Numero di bit | Combinazioni |
|---|---|---|
| Bit | 1 | 2 |
| Nibble | 4 | 16 |
| Byte | 8 | 256 |
| Word | Dipende dall’architettura | Dipende dal numero di bit |
I pesi dei bit in un byte
Nel sistema binario ogni posizione ha un peso pari a una potenza di 2. Nel byte, partendo dal bit meno significativo:
Pesi dei bit in un byte
Come funziona il sistema binario?
Il sistema decimale usa dieci simboli, da 0 a 9. Il sistema binario usa soltanto 0 e 1 e ogni posizione rappresenta una potenza di 2.
1011 significa:
1×8 + 0×4 + 1×2 + 1×1 = 11.
Conversione da binario a decimale
Per convertire un numero binario in decimale basta sommare i pesi delle posizioni in cui compare un 1.
1×32 + 1×16 + 0×8 + 1×4 + 0×2 + 1×1
32 + 16 + 4 + 1 = 53.
Conversione da decimale a binario
Un metodo semplice consiste nel cercare quali potenze di 2 devono essere sommate per ottenere il numero desiderato.
45 = 32 + 8 + 4 + 1
Pesi: 32, 16, 8, 4, 2, 1
Bit: 1 0 1 1 0 1
45₁₀ = 101101₂.
Perché esiste il sistema esadecimale?
Scrivere numeri binari lunghi è scomodo e facilita gli errori. Il sistema esadecimale usa base 16 e permette di rappresentare gruppi di 4 bit con un solo simbolo.
Dopo le cifre da 0 a 9 vengono utilizzate le lettere A, B, C, D, E e F.
Tabella binario, decimale ed esadecimale
| Binario | Decimale | Esadecimale |
|---|---|---|
| 0000 | 0 | 0 |
| 0001 | 1 | 1 |
| 0010 | 2 | 2 |
| 0011 | 3 | 3 |
| 0100 | 4 | 4 |
| 0101 | 5 | 5 |
| 0110 | 6 | 6 |
| 0111 | 7 | 7 |
| 1000 | 8 | 8 |
| 1001 | 9 | 9 |
| 1010 | 10 | A |
| 1011 | 11 | B |
| 1100 | 12 | C |
| 1101 | 13 | D |
| 1110 | 14 | E |
| 1111 | 15 | F |
Conversione binario ↔ esadecimale
La conversione è particolarmente semplice perché ogni cifra esadecimale corrisponde esattamente a quattro bit.
1101 0110
1101 = D
0110 = 6
Quindi 11010110₂ = D6₁₆.
3A
3 = 0011
A = 1010
Quindi 3A₁₆ = 00111010₂.
Binario, decimale ed esadecimale a confronto
Prefissi 0b e 0x nel codice
Nei linguaggi usati con microcontrollori si possono indicare esplicitamente numeri binari ed esadecimali.
Quanti valori posso rappresentare con N bit?
Con un intero senza segno, il valore minimo è 0 e quello massimo è:
| Bit | Combinazioni | Range unsigned |
|---|---|---|
| 4 | 16 | 0–15 |
| 8 | 256 | 0–255 |
| 10 | 1024 | 0–1023 |
| 12 | 4096 | 0–4095 |
| 16 | 65.536 | 0–65.535 |
Numeri con segno e complemento a due
Quando dobbiamo rappresentare anche numeri negativi, nei moderni sistemi digitali viene normalmente utilizzato il complemento a due.
Minimo = −128
Massimo = +127
11111111 vale 255 se interpretato unsigned, ma −1 se interpretato signed in complemento a due.
Esempi pratici con Arduino
Binario ed esadecimale sono molto utili quando lavoriamo con registri, porte digitali, maschere e protocolli.
Lo stesso dato viene mostrato in tre basi diverse senza cambiare il contenuto memorizzato.
Perché conoscere i bit è importante?
Le operazioni bitwise permettono di modificare singoli bit senza alterare gli altri. Sono fondamentali quando si lavora a basso livello.
| Operatore | Nome | Uso tipico |
|---|---|---|
| & | AND | Mascherare o leggere determinati bit. |
| | | OR | Impostare bit a 1. |
| ^ | XOR | Invertire selettivamente bit. |
| ~ | NOT | Invertire tutti i bit. |
| << | Shift sinistro | Spostare i bit verso posizioni più significative. |
| >> | Shift destro | Spostare i bit verso posizioni meno significative. |
Errori comuni
- pensare che un byte possa rappresentare solo 0–255 in qualsiasi situazione;
- confondere numero di bit e numero di valori rappresentabili;
- dimenticare che il valore massimo unsigned è 2^N − 1;
- leggere
0x10come dieci invece che sedici; - confondere una cifra esadecimale con un byte;
- dimenticare che ogni cifra hex rappresenta quattro bit;
- interpretare un valore signed come unsigned o viceversa;
- confondere il valore numerico con il modo in cui viene visualizzato;
- scrivere numeri binari lunghi senza raggrupparli in nibble;
- usare operazioni bitwise senza verificare la larghezza del tipo di dato.

