Impara › Argomento 6
Sistemi di numerazione: binario, ottale, esadecimale e codici
7 min di lettura · Team bitGateLab
Un circuito digitale capisce soltanto zeri e uni, ma tu hai bisogno di rappresentare quantità, segni, cifre di un display e posizioni di un encoder. Qui imparerai come funzionano i sistemi posizionali, a convertire tra decimale, binario, ottale ed esadecimale, a rappresentare i numeri negativi in complemento a 2 e a usare due codici molto comuni in elettronica: BCD e Gray.
Sistemi posizionali
In un sistema posizionale in base b, ogni cifra viene moltiplicata per una potenza di b secondo la sua posizione, contando da 0 a partire da destra. Il decimale 347 vale 3·102 + 4·101 + 7·100. Lo stesso accade con le altre basi:
- Binario (base 2): cifre 0 e 1, dette bit. Pesi 1, 2, 4, 8, 16, 32, 64, 128...
- Ottale (base 8): cifre da 0 a 7. Ogni cifra ottale equivale a 3 bit.
- Esadecimale (base 16): cifre da 0 a 9 e da A a F (A = 10, B = 11, C = 12, D = 13, E = 14, F = 15). Ogni cifra esadecimale equivale a 4 bit.
Per evitare confusione si indica la base con un pedice (10102, 178, 3F16) oppure con un prefisso come 0b o 0x.
Conversioni tra basi
Da qualsiasi base a decimale
Moltiplica ogni cifra per il suo peso e somma. Per esempio, 2F316 = 2·256 + 15·16 + 3·1 = 512 + 240 + 3 = 755.
Da decimale a binario
Dividi ripetutamente per 2 e annota i resti; il numero binario si legge dal basso verso l'alto (l'ultimo resto è il bit più significativo). Un altro modo è sottrarre, una volta dopo l'altra, la più grande potenza di 2 che ci sta.
Tra binario, ottale ed esadecimale
Poiché 8 = 23 e 16 = 24, non occorre passare per il decimale: raggruppa i bit a 3 a 3 (ottale) o a 4 a 4 (esadecimale) partendo da destra, e completa con zeri a sinistra se necessario.
Esempio 1: convertire 156 in binario, ottale ed esadecimale.
- Divisioni successive: 156/2 = 78 r 0; 78/2 = 39 r 0; 39/2 = 19 r 1; 19/2 = 9 r 1; 9/2 = 4 r 1; 4/2 = 2 r 0; 2/2 = 1 r 0; 1/2 = 0 r 1.
- Leggendo i resti dal basso verso l'alto: 156 = 100111002. Verifica: 128 + 16 + 8 + 4 = 156.
- Ottale: 10 011 100 → 010 011 100 → 2 3 4. Risultato 2348 (2·64 + 3·8 + 4 = 156).
- Esadecimale: 1001 1100 → 9 C. Risultato 9C16 (9·16 + 12 = 156).
Numeri negativi: complemento a 2
Un registro a n bit non ha un posto per il segno "meno", perciò si adotta una convenzione. Quella usata praticamente da tutti i processori è il complemento a 2: il bit più significativo ha peso negativo, −2n−1, e gli altri conservano il loro peso positivo. Con 8 bit l'intervallo va da −128 a +127; con 4 bit, da −8 a +7.
Per ottenere l'opposto di un numero:
- Scrivi il numero positivo con tutti i suoi bit.
- Inverti ogni bit (questo è il complemento a 1).
- Somma 1.
Il vantaggio è enorme: la somma e la sottrazione si eseguono con lo stesso circuito sommatore, senza logica speciale per il segno. C'è un solo zero (00000000) e il bit più significativo indica direttamente se il numero è negativo.
Esempio 2: rappresentare −45 su 8 bit e calcolare 25 + (−12).
- 45 = 00101101. Invertendo: 11010010. Sommando 1: 11010011 = −45.
- Verifica con i pesi: −128 + 64 + 16 + 2 + 1 = −45.
- Ora 25 + (−12). 25 = 00011001; 12 = 00001100, invertito 11110011, più 1: 11110100 = −12.
- Somma: 00011001 + 11110100 = 1 00001101. Il riporto che esce dal bit 8 si scarta.
- Risultato: 00001101 = 13. Corretto.
Codice BCD
Nel BCD (decimale codificato in binario, versione 8421) ogni cifra decimale è rappresentata separatamente con 4 bit. Così 395 si scrive 0011 1001 0101. Non è la stessa cosa che convertire 395 in binario (1100010112): il BCD usa più bit, ma ogni gruppo viene inviato direttamente a un decodificatore per display a 7 segmenti, senza divisioni. I codici da 1010 a 1111 non sono validi in BCD; in un progetto, queste combinazioni vengono di solito trattate come condizioni di indifferenza nelle mappe di Karnaugh.
Codice Gray
Nel codice Gray, tra un valore e il successivo cambia un solo bit. Nel binario ordinario, passare da 7 (0111) a 8 (1000) cambia tutti e quattro i bit contemporaneamente; se un sensore legge proprio durante la transizione, può vedere per un istante un qualsiasi valore intermedio. Con il Gray questo errore non si verifica, per questo lo si usa negli encoder di posizione, nei contatori che attraversano domini di clock diversi e nelle intestazioni delle mappe di Karnaugh.
- Da binario a Gray: il bit più significativo si copia; ogni bit successivo è la XOR del bit binario corrispondente con il bit binario alla sua sinistra. In formula, g = b ⊕ (b spostato di un posto a destra).
- Da Gray a binario: il bit più significativo si copia; ogni bit binario successivo è la XOR del bit binario appena ottenuto con il bit Gray di quella posizione.
| Decimale | Binario | Gray | Decimale | Binario | Gray |
|---|---|---|---|---|---|
| 0 | 0000 | 0000 | 8 | 1000 | 1100 |
| 1 | 0001 | 0001 | 9 | 1001 | 1101 |
| 2 | 0010 | 0011 | 10 | 1010 | 1111 |
| 3 | 0011 | 0010 | 11 | 1011 | 1110 |
| 4 | 0100 | 0110 | 12 | 1100 | 1010 |
| 5 | 0101 | 0111 | 13 | 1101 | 1011 |
| 6 | 0110 | 0101 | 14 | 1110 | 1001 |
| 7 | 0111 | 0100 | 15 | 1111 | 1000 |
Esempio 3: il binario 1011 in Gray e ritorno.
- Copia il primo bit: 1.
- 1 ⊕ 0 = 1; 0 ⊕ 1 = 1; 1 ⊕ 1 = 0. Gray = 1110.
- Al ritorno: copia il primo bit, b3 = 1. Poi b2 = 1 ⊕ 1 = 0, b1 = 0 ⊕ 1 = 1, b0 = 1 ⊕ 0 = 1. Binario = 1011.
Nella tabella, l'11 decimale compare con il Gray 1110: coincide.
Errori comuni
- Raggruppare i bit per l'ottale o l'esadecimale partendo da sinistra. Si raggruppa sempre dal bit meno significativo.
- Dimenticare il "+1" del complemento a 2. Invertire soltanto dà il complemento a 1, che ha due zeri e un intervallo diverso.
- Interpretare 11010011 come 211 quando il registro è con segno. La stessa configurazione di bit vale 211 senza segno o −45 con segno: dipende dalla convenzione.
- Confondere il BCD con il binario. Il 25 in BCD è 0010 0101, mentre in binario è 11001.
- Convertire da Gray a binario facendo la XOR con il bit Gray vicino invece che con il bit binario appena calcolato.
Provalo nel simulatore
Puoi vedere queste rappresentazioni "dal vivo" con pochi ingressi e uscite, e verificare la conversione in Gray con le porte XOR.
- Inserisci quattro ingressi come bit da b3 a b0 e collega un display o quattro LED per vedere il valore.
- Aggiungi tre porte XOR: g2 = b3 ⊕ b2, g1 = b2 ⊕ b1, g0 = b1 ⊕ b0, e collega b3 direttamente a g3.
- Porta gli ingressi da 0000 a 1111 e osserva sulle uscite che tra un valore e il successivo cambia un solo bit Gray.
- Genera la tabella di verità del circuito e confrontala con la tabella di questo articolo.
Esercizi
- Converti 110101102 in esadecimale e in decimale.
Risposta
1101 0110 = D616 = 13·16 + 6 = 214.
- Converti 200 in binario e in esadecimale.
Risposta
200 = 128 + 64 + 8 = 110010002 = C816.
- Rappresenta −100 in complemento a 2 su 8 bit.
Risposta
100 = 01100100; invertito 10011011; più 1: 10011100. Verifica: −128 + 16 + 8 + 4 = −100.
- Converti il decimale 6 in codice Gray a 4 bit e il BCD 0111 0010 in decimale.
Risposta
6 = 0110; Gray: 0, 0 ⊕ 1 = 1, 1 ⊕ 1 = 0, 1 ⊕ 0 = 1 → 0101. Il BCD 0111 0010 è 72.
Per vedere come un circuito somma e sottrae questi numeri, prosegui con i sommatori binari.