DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Codifica binaria dell’informazione Marco D. Santambrogio – [email protected] Ver. aggiornata al 29 Ottobre 2013 Info di servizio DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Doodle su demo 1mo compitino http://tinyurl.com/infob1314-demo1mo • Correzione demo http://tinyurl.com/infob1314-cdemo1mo 2 Un obiettivo per domarli tutti… DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 3 Uno dei problemi… DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 4 Obiettivi DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Rappresentazione dell’informazione • Da decimale a binario Contiamo con i numeri binari • Limiti della rappresentazione • Complemento a due 5 Codifica binaria DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Chi ha “inventato” il bit? Claude Shannon nel 1948 nel paper: “A Mathematical Theory of Communication” 6 Codifica binaria DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Alfabeto binario: usiamo dispositivi con solo due stati • Problema: assegnare un codice univoco a tutti gli oggetti compresi in un insieme predefinito (e.g. studenti) • Quanti oggetti posso codificare con k bit: 1 bit 2 stati (0, 1) 2 oggetti (e.g. Vero/Falso) 2 bit 4 stati (00, 01, 10, 11) 4 oggetti 3 bit 8 stati (000, 001, …, 111) 8 oggetti … k bit 2k stati 2k oggetti • Quanti bit mi servono per codificare N oggetti: N ≤ 2k k ≥ log2N k = log2N (intero superiore) • Attenzione: ipotesi implicita che i codici abbiano tutti la stessa lunghezza 7 Esempio di codifica binaria DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Problema: assegnare un codice binario univoco a tutti i giorni della settimana • Giorni della settimana: N = 7 k ≥ log27 k = 3 • Con 3 bit possiamo ottenere 8 diverse configurazioni: Ne servono 7, quali utilizziamo? Quale configurazione associamo a quale giorno? • Attenzione: ipotesi che i codici abbiano tutti la stessa lunghezza 8 I giorni della settimana in binario (1) DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lunedì Lunedì Martedì Domenica Sabato Venerdì Mercoledì Lunedì Giovedì Mercoledì Martedì Sabato Domenica Martedì Lunedì Giovedì Mercoledì Sabato Venerdì Martedì Mercoledì Giovedì Venerdì Sabato Venerdì Giovedì Domenica 1 bit 2 “gruppi” 2 bit 4 “gruppi” Domenica 3 bit 8 “gruppi” 9 I giorni della settimana in binario (2) DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lunedì Martedì Domenica Giovedì Giovedì Giovedì Sabato Sabato Martedì Sabato Martedì Venerdì Domenica Mercoledì Giovedì Mercoledì Sabato Domenica Mercoledì Martedì Domenica Mercoledì Venerdì Venerdì Lunedì Venerdì Lunedì Lunedì 1 bit 2 “gruppi” 2 bit 4 “gruppi” 3 bit 8 “gruppi” 10 Stampa dei caratteri DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 11 Quale è il codice ASCII di ‘a’? DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Ma quindi, quanto vale ‘a’? 97, 353, 609 Siamo sicuri? 97, 353=97+256, 609=353+256=97+256+256 97 = 97 + 256*0 353 = 97+256*1 609 = 97+256*2 12 97+256*i… quindi… DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Quanti caratteri ci sono? 256 • Con quanti bit rappresento 256 numeri? log2256 = log228 = 8 13 Codifica binaria dei caratteri DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Quanti sono gli oggetti compresi nell’insieme? 26 lettere maiuscole + 26 minuscole 52 10 cifre Circa 30 segni d’interpunzione Circa 30 caratteri di controllo (EOF, CR, LF, …) circa 120 oggetti complessivi k = log2120 = 7 • Codice ASCII: utilizza 7 bit e quindi può rappresentare al massimo 27=128 caratteri Con 8 bit (= byte) rappresento 256 caratteri (ASCII esteso) Si stanno diffondendo codici più estesi (e.g. UNICODE) per rappresentare anche i caratteri delle lingue orientali 14 ASCII su 7 bit 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 010 sp 011 0 100 @ 101 P 110 ` 111 p ! 1 A Q a q " 2 B R b r # 3 C S c s $ 4 D T d t % 5 E U e u & 6 F V f v ' 7 G W g w ( 8 H X h x ) 9 I Y I Y * : J Z j z + ; K [ k { , < L \ l | = M ] m } . / > ? N O ^ _ n o ~ canc 1111 0000 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 15 bit, Byte, KiloByte, MegaByte, … DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE bit = solo due stati, “0” oppure “1”. Byte = 8 bit, quindi 28 = 256 stati KiloByte [KB] = 210 Byte = 1024 Byte ~ 103 Byte MegaByte [MB] = 220 Byte = 1'048'576 Byte ~ 106 Byte GigaByte [GB] = 230 Byte ~ 109 Byte TeraByte [TB] = 240 Byte ~ 1012 Byte PetaByte [PB] = 250 Byte ~ 1015 Byte ExaByte [EB] = 260 Byte ~ 1018 Byte 16 Da Hobbit a Hobbyte DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 17 Da base 10 a base 2 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Dato un numero K rappresentato in base dieci, la sua rappresentazione in base due sarà del tipo bn bn-1bn-2 … b1b0 bi: cifra binaria • Per convertire un numero in base dieci nel corrispondente in base due si devono trovare i resti delle divisioni successive del numero K per due 18 Da base 10 a base 2 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Esempio: il numero 610: 6/2 = 3 resto 0 3/2 = 1 resto 1 1/2 = 0 resto 1 • Leggendo i resti dal basso verso l’alto, si ha che la rappresentazione binaria del numero 610 è 1102 • Per una corretta verifica basta riconvertire il risultato alla base 10 Cioè, calcolare 1 x 22 + 1 x 21 + 0 x 20 19 Da base 10 a base 2 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Perché 1102 = 610 ? 6/2 = 3 resto 0 3/2 = 1 resto 1 1/2 = 0 resto 1 0 x 20 + 1 x 21 + 1 x 22 =6 1 x 22 + 1 x 21 + 0 x 20 = 1 x 21 + 1 x 20 con resto 0 2 1 x 21 + 1 x 20 = 1 x 20 con resto 1 2 1 x 20 = 0 con resto 1 2 20 Da base 10 a base 2 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Esempio: il numero 34510: 345/2 = 172 resto 1 172/2 = 86 resto 0 86/2 = 43 resto 0 43/2 = 21 resto 1 21/2 = 10 resto 1 10/2 = 5 resto 0 5/2 = 2 resto 1 2/2 = 1 resto 0 1/2 = 0 resto 1 • Leggendo i resti dal basso verso l’alto Larappresentazione binaria del numero 34510 è 1010110012 21 Altre basi: ottale, esadecimale DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Sistema ottale Utilizza una notazione posizionale basata su otto cifre (0,1,…,7) e sulle potenze di 8 Esempio: 1038 = 1 x 82 + 0 x 81 + 3 x 80 = 67 • Sistema esadecimale Utilizza una notazione posizionale basata su sedici cifre (0,1,…,9,A,B,C,D,E,F) e sulle potenze di 16 Esempio: 10316 = 1 x 162 + 0 x 161 + 3 x 160 = 259 Esempio: AC416 = 10 x 162 + 12 x 161 + 4 x 160 = 2756 22 Operazioni su numeri binari DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Vediamo solo il caso della addizione nella codifica binaria: Si mettono in colonna i numeri da sommare Si calcola il riporto ogni volta che la somma parziale supera il valore 1 • Addizione: 0+0=0 0+1=1 1+0=1 1+1=0 con riporto 0 con riporto 0 con riporto 0 con riporto 1 23 Operazioni su numeri binari DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Addizione: 0+0=0 0+1=1 1+0=1 1+1=0 con riporto 0 con riporto 0 con riporto 0 con riporto 1 • Esempi: 1+ 1= 10 101+ 11= 1000 10110101+ 1000110= 11111011 111+ 11= 1010 24 Codici a lunghezza fissa DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Se si usa un numero prestabilito di cifre si ha un codice a lunghezza fissa • In questo modo si pone anche un limite al numero massimo rappresentabile • Esempio: qual è il numero più grande rappresentabile con 4 cifre? In base 10: In base 2: In base 16: In base 8: 9999 1111 FFFF 7777 (=1510) (=6553510) (=409510) 25 Il fattoriale DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Dato n, intero positivo, si definisce n fattoriale e si indica con n! il prodotto dei primi n numeri interi positivi minori o uguali di quel numero. In formule • Nota: 0! = 1 1! = 1 2! = 2, 3! = 6,… 26 Il fattoriale: codice DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 27 Proviamo ad eseguirlo… DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE WAT 28 Codici a lunghezza fissa DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Numeri maggiori di quello massimo rappresentabile causano problemi di overflow Ovvero per essere rappresentati richiedono più cifre di quelle a disposizione • Esempio: 4 cifre In base 10: In base 2: In base 16: In base 8: 9999 + 1 1111 + 1 FFFF + 1 7777 + 1 = 1000010 = 100002 (=1610) = 1000016 (=6553610) = 100008 (=409610) 29 Codici a lunghezza fissa DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • In generale, con N cifre a disposizione e base b il più grande numero (intero positivo) rappresentabile si può esprimere come bN – 1 • Esempio: N=4 In base 10: In base 2: In base 16: In base 8: 9999 1111 FFFF 7777 = 104 - 1 = 24 - 1 = 164 - 1 = 84 - 1 30 Codici a lunghezza fissa DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Esempio di overflow nel sistema binario dovuto a operazioni aritmetiche: • 5 + 4 = 9 (in sistema decimale) abbiamo usato solo una cifra decimale per il risultato Ricordiamo: 510 = 1012, 410 = 1002 101+ 100= 1001 (in sistema binario) Errore: overflow (non può essere codificato 910 = 10012 con tre bit) 31 Rappresentazione dei numeri DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Possiamo rappresentare i numeri usando un numero variabile di cifre (che dipende dal valore che si vuole rappresentare) Come? Introduciamo un simbolo speciale che indica dove termina la rappresentazione di un numero e inizia quella del numero successivo Esempio: 1001#11#1 (codice a lunghezza variabile, # separatore) • Esistono anche “codici di espansione”, che permettono di definire dei codici a lunghezza variabile senza far uso del carattere di separazione 32 Rappresentazione dei numeri DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • In realtà, una semplice codifica binaria come quella discussa fino ad ora non è sufficiente, per due motivi: Numeri negativi Numeri con la virgola • Per questi numeri vengono utilizzate delle rappresentazioni differenti Per esempio “complemento a due” per rappresentare i numeri negativi 33 Numeri negativi DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Si può pensare di usare un bit per il segno “0” identifica “+” “1” identifica “-” • Gli altri bit vengono usati per codificare il valore assoluto (modulo) del numero [-22+1, 22-1] [0, 23-1] -3 -2 -1 0 1 2 3 4 5 6 7 34 Numeri negativi - problemi DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Con 3 bit avremo: Problemi: 000 +0 001 +1 010 +2 011 +3 100 -0 101 -1 110 -2 111 -3 Il numero 0 ha due rappresentazioni Per l’operazione di somma si deve tener conto dei segni degli addendi 0010+ (+2) 1011= (-3) 1 1 0 1 (-5 ERRATO) 35 Il fattoriale: codice DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 36 Proviamo ad eseguirlo… DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE int sono interi con segno 37 Il fattoriale: unsigned int DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 38 Proviamo ad eseguirlo… DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 39 Numeri negativi: Complemento a due DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Il bit più significativo rappresenta il segno del numero: 0 per i numeri positivi e 1 per i numeri negativi • La rappresentazione di un numero positivo si ottiene codificando il valore assoluto del numero con i bit restanti • La rappresentazione di un numero negativo si ottiene in tre passi: Si rappresenta in complemento a due il numeri positivo con lo stesso valore assoluto del numero negativo da codificare Si invertono tutti i bit in tale rappresentazione (01,10) Si somma uno al risultato ottenuto al passo precedente 40 Complemento a due DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Esempio (con 4 bit a disposizione): La codifica di +5 è 0101 La codifica del numero –5 avviene in tre passi: • La rappresentazione in complemento a due di +5 è 0101 • Invertendo tutti i bit si ottiene 1010 • Sommando 1 si ottiene 1011, la rappresentazione in complemento a due di -5 41 Complemento a due DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Per ottenere un numero con segno data la sua rappresentazione in complemento a due: Se il primo bit è 0 il numero è positivo: per calcolarne il valore assoluto si esegue la conversione da binario a decimale Se il primo bit è 1 il numero è negativo: • • • • Si ignora il primo bit Si invertono i restanti bit Si converte il numero da binario a decimale Si somma uno al numero ottenuto per ottenere il valore assoluto del numero negativo 42 Complemento a due DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Esempio: 1011 Si esclude il primo bit Invertendo 011 si ottiene 100 che è codifica di 4 Va aggiunto 1 per ottenere il valore assoluto 5 Il risultato è quindi -5 43 Complemento a due DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Con 3 bit avremo: Esempi di addizione: 000 +0 001 +1 010 +2 011 +3 100 -4 101 -3 110 -2 111 -1 0010+ 1011= 1 1 0 1 (-3) (+2) (-5) 0111+ 1011= 0 0 1 0 (+2) (+7) (-5) Nel secondo esempio, l’overflow è ignorato 44 Exe 1: Codifica dell’informazione DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Quanti bit si devono utilizzare per rappresentare 300 informazioni distinte? • Quanti byte occupa la parola “psicologia” se la si codifica utilizzando il codice ASCII? • Dati 12 bit per la codifica, quante informazioni distinte si possono rappresentare? 45 Exe 2: Codifica dei suoni DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Quanto spazio occupa un suono della durata di 30 secondi campionato a 100 Hz (100 campioni al secondo), in cui ogni campione occupa 4 byte? 46 Exe 3: Codifica dei numeri DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Codificare il numero 17510 nella corrispondente rappresentazione binaria • Ordinare in modo crescente i seguente numeri: 10510 , 128 , 1001100002 , 1001110 • Codificare il numero negativo –1510 nella rappresentazione in complemento a due 47 Exe 4: Codifica delle immagini DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Quanti bit occupa un’immagine di 100 x 100 pixel in bianco e nero? • Quanti byte occupa un’immagine di 100 x 100 pixel a 256 colori? • Se un’immagine a 16777216 di colori occupa 2400 byte, da quanti pixel sarà composta? 48 Fonti per lo studio + Credits DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Fonti per lo studio Informatica arte e mestiere, S. Ceri, D. Mandrioli, L. Sbattella, McGrawHill • Capitolo 11 Introduzione ai sistemi informatici, D. Sciuto, G. Buonanno, L. Mari, 4a Ed, McGrawHill • Capitolo 2 The Art & Craft of Computing, S. Ceri, D. Mandrioli, L. Sbattella, Addison-Wesley • Capitolo 13 • Credits P. Spoletini J. Sproston 49