bitGateLab Digital · Impara
Italiano
Apri il simulatore

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:

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.

  1. 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.
  2. Leggendo i resti dal basso verso l'alto: 156 = 100111002. Verifica: 128 + 16 + 8 + 4 = 156.
  3. Ottale: 10 011 100 → 010 011 100 → 2 3 4. Risultato 2348 (2·64 + 3·8 + 4 = 156).
  4. 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:

  1. Scrivi il numero positivo con tutti i suoi bit.
  2. Inverti ogni bit (questo è il complemento a 1).
  3. 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).

  1. 45 = 00101101. Invertendo: 11010010. Sommando 1: 11010011 = −45.
  2. Verifica con i pesi: −128 + 64 + 16 + 2 + 1 = −45.
  3. Ora 25 + (−12). 25 = 00011001; 12 = 00001100, invertito 11110011, più 1: 11110100 = −12.
  4. Somma: 00011001 + 11110100 = 1 00001101. Il riporto che esce dal bit 8 si scarta.
  5. Risultato: 00001101 = 13. Corretto.
Overflow: se sommi due numeri dello stesso segno e il risultato ha il segno opposto, il risultato non sta nei bit disponibili. Per esempio, su 8 bit 100 + 50 = 01100100 + 00110010 = 10010110, che in complemento a 2 vale −106 invece di 150. La somma di numeri di segno diverso non va mai in overflow.

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.

DecimaleBinarioGrayDecimaleBinarioGray
000000000810001100
100010001910011101
2001000111010101111
3001100101110111110
4010001101211001010
5010101111311011011
6011001011411101001
7011101001511111000

Esempio 3: il binario 1011 in Gray e ritorno.

  1. Copia il primo bit: 1.
  2. 1 ⊕ 0 = 1; 0 ⊕ 1 = 1; 1 ⊕ 1 = 0. Gray = 1110.
  3. 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

Provalo nel simulatore

Puoi vedere queste rappresentazioni "dal vivo" con pochi ingressi e uscite, e verificare la conversione in Gray con le porte XOR.

  1. Inserisci quattro ingressi come bit da b3 a b0 e collega un display o quattro LED per vedere il valore.
  2. Aggiungi tre porte XOR: g2 = b3 ⊕ b2, g1 = b2 ⊕ b1, g0 = b1 ⊕ b0, e collega b3 direttamente a g3.
  3. Porta gli ingressi da 0000 a 1111 e osserva sulle uscite che tra un valore e il successivo cambia un solo bit Gray.
  4. Genera la tabella di verità del circuito e confrontala con la tabella di questo articolo.

Esercizi

  1. Converti 110101102 in esadecimale e in decimale.
    Risposta

    1101 0110 = D616 = 13·16 + 6 = 214.

  2. Converti 200 in binario e in esadecimale.
    Risposta

    200 = 128 + 64 + 8 = 110010002 = C816.

  3. Rappresenta −100 in complemento a 2 su 8 bit.
    Risposta

    100 = 01100100; invertito 10011011; più 1: 10011100. Verifica: −128 + 16 + 8 + 4 = −100.

  4. 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.