Codici binari - BCD, ASCII, Unicode, parità e Gray
In questa pagina 7
Una codifica associa a ogni elemento di un insieme discreto una configurazione di bit, per facilitare elaborazione, memorizzazione e trasmissione. Un codice a bit ha configurazioni: 4 elementi si codificano con 2 bit (00, 01, 10, 11), 8 elementi con 3 bit, 16 con 4 bit. Se gli elementi sono meno delle configurazioni, alcune configurazioni restano non utilizzate.
Codice BCD
Il BCD (Binary-Coded Decimal) codifica ogni cifra decimale con il suo valore binario su 4 bit. Per scrivere un numero si codifica cifra per cifra:
| cifra | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
|---|---|---|---|---|---|---|---|---|---|---|
| BCD | 0000 | 0001 | 0010 | 0011 | 0100 | 0101 | 0110 | 0111 | 1000 | 1001 |
Esempio. , mentre in binario puro è : le due rappresentazioni sono diverse. Invece coincidono solo perché il numero ha una cifra.
Le sei configurazioni (valori –) non sono cifre BCD: sono un esempio di configurazioni non utilizzate, che nelle mappe di Karnaugh diventano condizioni di indifferenza (Mappe di Karnaugh - POS, condizioni di don't care e paritàPer la POS minima si raggruppano gli 0 della mappa, si ottiene la SOP minima di $\overline F$ e si scrive $F$ come prodotto di somme (variabile diretta se vale 0 nel gruppo, negata se vale 1). Le condizioni di don't care (X) sono combinazioni di ingresso che non si presentano o la cui uscita è indifferente: si usano come 1 o come 0 a seconda di quel che allarga i gruppi (mai raggruppamenti fatti solo di X). Le funzioni XOR a più variabili (disparità) e XNOR (parità) hanno mappa a scacchiera: non si semplificano con i gruppi.Mappe di Karnaugh - POS, condizioni di don't care e parità →).
Lo spreco di bit (4 bit per 10 valori) è il prezzo della comodità quando ingressi e uscite sono numeri decimali (display, calcolatrici). Per rappresentare il numero in BCD servono 8 bit (), non 4: la cifra non esiste.
Attenzione ai quiz. è (non ): si legge a gruppi di 4. vale , non (che sarebbe la lettura binaria ). Il BCD è , cioè .
ASCII
L'ASCII (American Standard Code for Information Interchange) usa 7 bit per caratteri: lettere maiuscole e minuscole, cifre, segni di punteggiatura e caratteri di controllo non stampabili. Di solito si memorizza in un byte, con il bit più significativo a o usato per caratteri aggiuntivi.
Esempi: A ; a (le minuscole differiscono dalle maiuscole per un bit); la cifra 0 , la cifra 5 .
Relazione con il BCD: il codice ASCII di una cifra decimale si ottiene aggiungendo 011 a sinistra del suo BCD: 5 ( è il BCD di 5).
Unicode e UTF-8
L'ASCII non basta per le lingue del mondo. Unicode assegna a ogni carattere un numero univoco, il code point, indipendente da lingua, piattaforma e programma; si scrive U+ seguito dalle cifre esadecimali (T = U+0054, ± = U+00B1, € = U+20AC). La codifica più usata è UTF-8, che usa da 1 a 4 byte per code point ed è compatibile con l'ASCII: i primi code point hanno la stessa codifica a un byte.
| intervallo del code point | byte | schema dei bit |
|---|---|---|
| U+0000 – U+007F | 1 | 0xxxxxxx |
| U+0080 – U+07FF | 2 | 110xxxxx 10xxxxxx |
| U+0800 – U+FFFF | 3 | 1110xxxx 10xxxxxx 10xxxxxx |
| U+10000 – U+10FFFF | 4 | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx |
I bit x sono quelli del code point, scritti in binario e distribuiti da sinistra a destra.
Esempio ±: sta in byte. Gli bit di payload sono : i primi () vanno nel primo byte, gli ultimi () nel secondo: . Esempio €: , bit, quindi byte: .
UTF-8 non usa un solo byte per tutti i caratteri, né due byte per tutti quelli alfanumerici: lunghezza variabile.
Bit di parità
Per rilevare errori (non correggerli) si aggiunge un bit scelto in modo che il numero totale di 1 sia pari (parità pari, la più usata) oppure dispari.
Esempi. 1000001 ha due 1: con parità pari il bit è (), con parità dispari è (). 1010100 ha tre 1: parità pari bit (); parità dispari bit ().
Il ricevitore conta gli 1. Se in un sistema a parità pari arriva una parola con un numero dispari di 1, almeno un bit è stato corrotto (può rispondere con un NAK, negative acknowledge, e farsi ritrasmettere il dato). Se il numero è pari non c'è stato errore su un singolo bit, ma sono possibili due errori che si compensano: la parità rivela errori su un numero dispari di bit. Esempi con parità pari: 00100010 (due 1) e 11111111 (otto 1) sono parole accettabili, 00100011 segnalerebbe un errore. Per correggere servono più bit di controllo.
Distanza di Hamming
La distanza di Hamming tra due configurazioni è il numero di bit in cui differiscono. Esempi: e differiscono nei due bit meno significativi, distanza ; e differiscono in due posizioni, distanza ; e , distanza . Non è la differenza algebrica dei numeri.
Geometricamente, le configurazioni di bit sono i vertici di un ipercubo ( segmento, quadrato, cubo): due configurazioni a distanza sono unite da uno spigolo. Servirà nelle mappe di Karnaugh (Mappe di Karnaugh - implicanti e copertura minimaLa mappa di Karnaugh è la tabella di verità disposta in una griglia con righe e colonne in codice Gray, così che celle adiacenti (anche tra bordi opposti) differiscano in una sola variabile. Si raggruppano gli 1 in rettangoli di $2^k$ celle: ogni gruppo elimina $k$ variabili e dà un prodotto. Implicante primo = gruppo massimo; essenziale = unico a coprire un mintermine; la copertura minima contiene tutti gli essenziali più il minimo di altri primi (può non essere unica). Efficace fino a 4 variabili.Mappe di Karnaugh - implicanti e copertura minima →).
Codice Gray
Il codice Gray è un codice in cui due numeri consecutivi hanno distanza di Hamming : passando dal numero al successivo cambia un solo bit.
Perché serve. Un dispositivo che segnala la propria posizione con interruttori in codice binario passa da (posizione 3) a (posizione 4) cambiando tutti e tre i bit. Nella realtà i sensori non cambiano nello stesso istante: durante la transizione si può leggere , e è la posizione , un grosso errore. Con il Gray la transizione fra posizioni adiacenti cambia un solo sensore: per un encoder ottico a bit i sensori sul confine fra le posizioni e possono leggere solo o , entrambe corrette entro la tolleranza. (Da qui l'uso nei sensori di posizione; nel corso lo si usa anche per ordinare le mappe di Karnaugh e per codificare gli stati.)
Costruzione per riflessione. Si parte dal codice a bit, lo si riscrive in ordine inverso (specchiato) sotto se stesso, si antepone alla prima metà e alla seconda. Con bit: . Il primo e l'ultimo valore hanno distanza : il codice è chiuso (ciclico).
Conversione binario Gray. Il bit più significativo si copia; ogni altro bit è lo XOR del bit binario corrispondente con quello alla sua sinistra: . Esempio: : ; ; ; , quindi . La conversione inversa è .
| decimale | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| binario | 0000 | 0001 | 0010 | 0011 | 0100 | 0101 | 0110 | 0111 | 1000 | 1001 | 1010 | 1011 | 1100 | 1101 | 1110 | 1111 |
| Gray | 0000 | 0001 | 0011 | 0010 | 0110 | 0111 | 0101 | 0100 | 1100 | 1101 | 1111 | 1110 | 1010 | 1011 | 1001 | 1000 |
Codice Gray con un numero di parole non potenza di 2. Per parole pari (esempio ) si calcola il Gray delle prime parole () e si aggiunge la loro immagine speculare con il bit più significativo a : . Risultato: , ancora chiuso ( e distano ). Per parole (esempio ) basta prendere le prime del Gray normale: .
Errori comuni
- Leggere un BCD come binario ( non è ) o dimenticare che servono 4 bit per cifra.
- Dire che la parità corregge gli errori: li rileva, e solo se sono in numero dispari.
- Calcolare la distanza di Hamming come differenza dei numeri.
- Confondere ASCII a 7 bit con un codice a 8 bit.
- Pensare che UTF-8 usi sempre lo stesso numero di byte.
Versione ripasso
- Codice a bit: configurazioni.
- BCD: 4 bit per cifra, cifra per cifra (, diverso dal binario ); – non usati; per il numero servono bit; , .
- ASCII: 7 bit, caratteri; cifra ASCII + BCD;
A. - UTF-8: code point
U+…, da 1 a 4 byte, compatibile con ASCII; ± =11000010 10110001. - Parità: bit aggiunto per avere un numero pari (o dispari) di 1; rileva un numero dispari di errori;
1000001pari01000001, dispari11000001. - Distanza di Hamming: numero di bit diversi ( e : ).
- Gray: numeri consecutivi a distanza (sensori di posizione, mappe di Karnaugh); per riflessione o (); : ; il codice è chiuso.
- Errori: BCD letto come binario; parità che "corregge"; Hamming come differenza.