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
Definizione (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.
Definizione (codifica UTF-8)
intervallo del code point byte schema dei bit U+0000 – U+007F 1 0xxxxxxxU+0080 – U+07FF 2 110xxxxx 10xxxxxxU+0800 – U+FFFF 3 1110xxxx 10xxxxxx 10xxxxxxU+10000 – U+10FFFF 4 11110xxx 10xxxxxx 10xxxxxx 10xxxxxxI bit
xsono 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à
Definizione (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.
Esempio. 1011001 ha quattro 1: con parità pari il bit è (01011001), con parità dispari è (11011001).
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
Definizione (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.
Esempio. : i due codici differiscono in bit su ().
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
Definizione (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.
Esempio. A bit e differiscono in 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).
Formula (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 è .
Esempio. (): , , , , quindi .
| 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; con elementi bastano bit, con ne servono . Le configurazioni in più restano non utilizzate.
- BCD: ogni cifra decimale su 4 bit, cifra per cifra: , . Esempio: , diverso dal binario . Le configurazioni – non sono cifre e diventano don't care nelle mappe di Karnaugh (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à →). Il numero in BCD richiede bit ().
- Letture BCD: (si legge a gruppi di 4, non come ); , non ; .
- ASCII: 7 bit per caratteri (lettere, cifre, punteggiatura e caratteri di controllo), di solito in un byte. Esempi:
A;a(le minuscole differiscono dalle maiuscole per un bit);0;5. - ASCII e BCD: il codice ASCII di una cifra è seguito dal suo BCD:
5. - Unicode e UTF-8: a ogni carattere un code point
U+…(TU+0054, ±U+00B1, €U+20AC). UTF-8 usa da 1 a 4 byte per code point e i primi code point hanno la stessa codifica dell'ASCII. Esempio ±: sta in 2 byte, . Per servono 3 byte. - Bit di parità: si aggiunge un bit per avere un numero pari (parità pari, la più usata) o dispari di 1.
1011001(quattro 1) con parità pari dà01011001, con parità dispari11011001. Il ricevitore rileva errori su un numero dispari di bit; non li corregge. Esempi con parità pari:00100010e11111111sono accettabili,00100011segnala un errore. - Distanza di Hamming: numero di bit in cui due configurazioni differiscono, non la differenza dei numeri. e : distanza ; e : distanza ; . Le configurazioni di bit sono i vertici di un ipercubo (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: due numeri consecutivi differiscono per un solo bit (, ). Serve ai sensori di posizione: con il binario la transizione può essere letta come , con il Gray no.
- Costruzione per riflessione: si specchia il codice a bit e si antepone alla prima metà e alla seconda: . Il codice è chiuso (primo e ultimo valore distano ).
- Conversione binario Gray: , . Esempi: ; . Inversa: .
- Gray con parole pari: per parole si prendono le prime () e la loro immagine speculare con il bit più significativo a ; per parole, le prime del Gray normale.
- Errori: BCD letto come binario ( non è ); parità che "corregge" (rileva solo errori dispari); distanza di Hamming calcolata come differenza tra i numeri; ASCII confuso con un codice a 8 bit; UTF-8 con un numero fisso di byte.