Codici BCD, Gray, ASCII e unità dei dati: esercizi svolti

Indice dei contenuti

    Oltre alla rappresentazione numerica pura, l’informatica usa codici specializzati: BCD per le cifre decimali, Gray per i sensori, ASCII per i caratteri. E misura i dati con unità (bit, byte e multipli) la cui distinzione è fonte di confusione. Questa scheda allena codici e unità di misura.

    1. Codifica BCD

    Esercizio. Codificare il numero decimale 59 in BCD.

    Il BCD (Binary Coded Decimal) codifica ogni cifra decimale con 4 bit separati:

    5\to0101,\qquad 9\to1001\ \Rightarrow\ 59=0101\ 1001_{\text{BCD}}.

    A differenza del binario puro (59=111011_2), il BCD tiene le cifre distinte. È usato dove serve corrispondenza diretta con le cifre decimali (display, calcolatrici).

    2. BCD contro binario puro

    Esercizio. Confrontare l’efficienza del BCD rispetto al binario puro per il numero 255.

    • Binario puro: 255=11111111_2 → 8 bit.
    • BCD: 2\,5\,5\to0010\ 0101\ 0101 → 12 bit.

    Il BCD spreca bit (le combinazioni 10101111 non sono usate): codifica solo 10 valori su 16 per nibble. È meno compatto, ma evita le conversioni binario↔decimale.

    3. Codice Gray

    Esercizio. Convertire 0110_2 (binario) nel corrispondente codice Gray.

    Il codice Gray si ottiene con XOR tra ogni bit e quello più significativo adiacente (il primo bit resta invariato):

    g_3=b_3=0,\quad g_2=b_3\oplus b_2=0\oplus1=1,\quad g_1=b_2\oplus b_1=1\oplus1=0,\quad g_0=b_1\oplus b_0=1\oplus0=1.

    0110_2\to0101_{\text{Gray}}.

    Caratteristica del Gray: numeri consecutivi differiscono per un solo bit. Riduce gli errori di lettura in encoder e sensori di posizione.

    4. Codice ASCII

    Esercizio. Il carattere ‘A’ ha codice ASCII 65. Qual è il codice di ‘C’ e la sua rappresentazione binaria a 8 bit?

    Le lettere maiuscole sono consecutive a partire da ‘A’ =65:

    \text{'C'}=65+2=67=01000011_2.

    L’ASCII assegna un codice numerico a ogni carattere. Le lettere consecutive hanno codici consecutivi: utile per ordinamenti e conversioni maiuscolo/minuscolo (differenza fissa di 32).

    5. Unità di misura dei dati

    Esercizio. Quanti bit ci sono in 2 kB (kilobyte, base binaria 1\text{ kB}=1024\text{ byte})?

    Un byte è 8 bit; il kilobyte binario è 2^{10}=1024 byte:

    2\ \text{kB}=2\times1024\ \text{byte}=2048\ \text{byte}=2048\times8=16\,384\ \text{bit}.

    Attenzione alla distinzione tra unità binarie (1\text{ KiB}=1024) e decimali (1\text{ kB}=1000 secondo SI): i produttori di dischi usano le decimali, i sistemi operativi spesso le binarie.

    6. Capacità di indirizzamento

    Esercizio. Con un bus di indirizzi a n=16 bit, quante celle di memoria distinte si possono indirizzare?

    Ogni bit raddoppia gli indirizzi possibili:

    \text{celle}=2^n=2^{16}=65\,536=64\ \text{KiB}.

    Un bus a 16 bit indirizza 64 KiB; a 32 bit, 4 GiB (2^{32}). Il numero di bit di indirizzo determina la memoria massima indirizzabile: è il limite architetturale dei processori.

    7. Decodifica da Gray a binario

    Esercizio. Convertire 0101_{\text{Gray}} nel corrispondente numero binario.

    Per passare da Gray a binario il primo bit resta uguale; ogni bit binario successivo si ottiene facendo XOR tra il bit binario precedente e il bit Gray corrente:

    b_3=g_3=0.

    Poi:

    b_2=b_3\oplus g_2=0\oplus1=1, \quad b_1=b_2\oplus g_1=1\oplus0=1, \quad b_0=b_1\oplus g_0=1\oplus1=0.

    Quindi:

    0101_{\text{Gray}}=0110_2=6_{10}.

    Il verso della conversione è diverso da quello binario→Gray: qui lo XOR è cumulativo, non solo tra bit adiacenti del codice ricevuto.

    8. ASCII: differenza tra maiuscole e minuscole

    Esercizio. Sapendo che \text{'A'}=65, trovare il codice ASCII di \text{'a'} e spiegare la relazione tra maiuscole e minuscole.

    Nel codice ASCII le lettere minuscole sono 32 posizioni dopo le corrispondenti maiuscole:

    \text{'a'}=65+32=97.

    In binario a 8 bit:

    \text{'A'}=01000001_2,\qquad \text{'a'}=01100001_2.

    La differenza è il bit 2^5=32. Questo è il motivo per cui, nei testi ASCII puri, cambiare maiuscolo/minuscolo può essere visto come l’accensione o lo spegnimento di un singolo bit, purché si resti sulle lettere alfabetiche.

    9. kB, KiB e capacità reale

    Esercizio. Un file misura 1{,}5\ \text{MiB}. Quanti byte contiene? Quanto varrebbe approssimativamente in MB decimali?

    Il mebibyte è binario:

    1\ \text{MiB}=2^{20}=1\,048\,576\ \text{byte}.

    Quindi:

    1{,}5\ \text{MiB}=1{,}5\cdot1\,048\,576=1\,572\,864\ \text{byte}.

    In megabyte decimali:

    1\,572\,864\ \text{byte}\approx1{,}573\ \text{MB}.

    La distinzione non è pedanteria: su grandi capacità la differenza tra multipli decimali e binari diventa visibile, per esempio tra dimensione dichiarata di un disco e dimensione mostrata dal sistema operativo.

    10. Bit di indirizzo e granularità

    Esercizio. Un processore ha 20 linee di indirizzo e indirizza celle da 1 byte. Quanta memoria massima può indirizzare?

    Con 20 linee si hanno:

    2^{20}=1\,048\,576

    indirizzi distinti. Se ogni indirizzo punta a 1 byte, la memoria massima è:

    1\,048\,576\ \text{byte}=1\ \text{MiB}.

    Se invece ogni indirizzo puntasse a parole da 4 byte, la capacità indirizzata in byte sarebbe quattro volte maggiore. Perciò, quando si parla di bus di indirizzi, bisogna sempre specificare anche la granularità indirizzabile.

    Errori comuni

    • Confondere BCD e binario puro. Il BCD codifica ogni cifra decimale separatamente (4 bit), il binario puro converte l’intero numero: rappresentazioni diverse.
    • Sbagliare la conversione Gray. Il Gray usa XOR a catena dal bit più significativo; il primo bit resta invariato.
    • Usare la stessa procedura per Gray→binario. La decodifica richiede XOR cumulativi: applicare la regola diretta al contrario produce risultati sbagliati.
    • Mescolare unità binarie e decimali. 1 KiB =1024 byte (binario), 1 kB =1000 byte (SI): la differenza cresce con i multipli.
    • Dimenticare il fattore 8 bit/byte. Per passare da byte a bit si moltiplica per 8: confondere bit e byte sbaglia di un fattore 8.

    Ultimo aggiornamento: