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 1010–1111 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:
Poi:
Quindi:
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:
In binario a 8 bit:
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:
Quindi:
In megabyte decimali:
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:
indirizzi distinti. Se ogni indirizzo punta a 1 byte, la memoria massima è:
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.