Codifica di Dati e Istruzioni Algoritmi Istruzioni che h operano su dati d Fondamenti di Informatica Per scrivere un programma è necessario rappresentare dati e istruzioni in un formato tale che l’esecutore automatico sia in grado di Codifica dell’Informazione Prof. Francesco Lo Presti Memorizzare istruzioni e dati Manipolare istruzioni e dati Codifica Codifica dell’Informazione Sistemi di Codifica La stessa informazione si può rappresentare in modi Sistema di codifica (o codifica, o codice) Usa un insieme di d simboli l di d base (alfabeto (alfabeto) lf ) I simboli dell’alfabeto possono essere combinati ottenendo differenti configurazioni (o codici, o stati), distinguibili l’una dall’altra Associa ogni configurazione ad una particolare entità di informazione (la configurazione confi urazione diventa un modo per rappresentarla) differenti diff ti 11 10 10 9 8 7 6 2 Stesso rappresentazione per informazioni differenti italiano fare,… inglese tariffa, prezzo, … fare italiano burro spagnolo burro,... asino, cavalletto, somaro, … Codifica 3 Codifica 4 Sistema di Codifica: Numeri Interi (Decimali) Codifica Binaria Alfabeto Alfabeto binario: due simboli Cifre “0” 0 , “1” 1 , “2” 2 , …, “9” 9 separatore decimale (“,”) separatore delle migliaia (“.”) Segni positivo ((“+”) + ) e negativo ((“-”)) Utilizzata nei sistemi informatici Si utilizza una grandezza fisica (luminosità, tensione elettrica la corrente elettrica), elettrica, elettrica) per rappresentare informazione Regole di composizione (sintassi) BIT ((BInary y digiT) g ) unità elementare di informazione rappresentabile con dispositivi elettronici Definiscono le combinazioni ben formate 12.318,43 9 123.1.8.43 ? Codice (semantica) 9 Due Du ssoli li stati st ti Associano ad ogni configurazione un’entità di informazione 12.318,43 = 1× 1×104+2 +2××103+3 +3××102+ 11××101+1 +1××100+4 +4××10-1+3 +3××10-2 Lo stesso alfabeto può essere usato per codici cod c diversi d vers 123,456 = 1× 1×102+ 2 2××101+3 +3××100+4 +4××10-1+5 +5××10-2+6 +6××10-3 [IT] 5 4 3 2 123,456 = 11××10 + 2× 2×10 + 3× 3×10 + 4× 4×10 + 5× 5×101 + 6× 6×100 [UK] Codifica con 1 bit si possono rappresentare 2 stati 0/1,, on/off, ff, si/no 5 Codifica Codifica Binaria Esempio di Codifica Binaria Quanti oggetti/entità si possono codificare con k Problema: assegnare un codice binario univoco a bit? t tti i giorni tutti i id della ll settimana tti Giorni della settimana: N=7, Ö k≥ log2N Ö k=3 1 bit Ö 2 stati {0,1} Ö 2 oggetti (e.g., Vero, Falso) 2 bit Ö 4 stati {00,01,10,11} {00 01 10 11} Ö 4 oggetti 3 bit Ö 8 stati {000,001,010,…,111} Ö 8 oggetti … K bit Ö2k stati Ö 2k oggetti C 3 bit, Con bit 8 configurazioni fi i i Possibile soluzione Lunedì 000 Martedì 001 Mercoledì 010 Giovedì 011 Venerdì 100 Sabato 101 Domenica 110 Quanti bit servono per codificare N oggetti? N≤2k Ö k≥ log2 N Ö k= log2 N (intero superiore) Attenzione: Ipotesi implicita che i codici abbiano tutti la stessa lunghezza Codifica 6 7 Codifica 8 Codifica Binaria dei Caratteri: Codice ASCII Codifica Binaria dei Caratteri: Codice ASCII Quanti sono gli oggetti compresi nell’insieme? 26 lettere l tt r maiuscole/miniscole m iusc l /minisc l Ö 52 10 cifre ~ 30 segni g di interpunzione p ~ 30 segni caratteri di controllo {EOF, CR, LF,…} Ö ~ 120 oggetti Ö k=7 Codice C di ASCII utilizza ili 7 bi bit Puo’ rappresentare 27=128 caratteri Con 8 bit(1 byte) si possono rappresentare 256 caratteri (ASCII esteso) Si stanno diffondendo codice p piu’ estesi,, e.g., g, UNICODE, per rappresentare anche i caratteri delle lingue orientali UNICODE 16 bit Ö 216=65536 caratteri UNICODE, Codifica 9 Codifica Codifica dei Numeri: Numeri e Numerali Sistemi di Numerazione Numero Numero:: Entita’ Astratta Posizionali Posizionali:: Il valore di un simbolo dipende dalla Numerale N Numerale: l : Sequenza S di caratteri tt i che h rappresenta t posizione i i che h esso occupa all’interno ll’i t della d ll configurazione. an-1an-2…a a0 B un numero in un dato sistema di numerazione Lo stesso numero e’ e rappresentato da numerali diversi in sistemi diversi 9 156 sistema decimale 9 CLVI in numeri romani Un numerale rappresenta un numero solo se si specifica un sistema di numerazione Lo stesso numerale rappresenta diversi numeri in diverse notazioni Es: 100100 Differiscono per la scelta della base B Base indica il numero di simboli usati (0,…,B(0,…,B-1) Decimale (B=10), Binario (B=2), Ottale (B=8), Esadecimale (B=16) Non posizionali: posizionali: Il valore di un simbolo non dipende dalla posizione che esso occupa all all’interno interno della configurazione 9 Centomilacento in notazione decimale 9 Trantasei in notazione binaria Codifica 10 11 Numeri Romani Codifica 12 Sistemi di Numerazione Posizionale Conversione BinarioÖ BinarioÖDecimale Sistema Decimale: Decimale: Sistema di Numerazione an-1an-2…a0 2 Ö an-1*2n-1+…+a1*21+a0*20 Posizionale P i i l in i b base B B=10 10 an-1an-2…a0 10 rappresenta t n 1 an-1*10 +…+a1*101+a0*100 101102 Ö 1*24+0*23+1*22+1*21+0*20=24+22+21=16+4+2=22 Ciascuna cifra Ci if rappresenta t il coefficiente ffi i t di una potenza t della base Si sommano le potenze di due a cui corrisponde un 1 nel numerale l 24 23 22 21 20 16 8 1 0 1 1 0 1 0 1 1 0 4 2 1 Sistema Binario: Binario: Sistema di Numerazione Posizionale in base b=2 an-1an-2…a0 2 rappresenta an-1*2 2n-1+…+a … a1*2 21+a a0*2 20 Codifica 13 Codifica Conversione DecimaleÖ DecimaleÖBinario Conversione DecimaleÖ DecimaleÖBinario Sistema di Numerazione in base B (B=2 caso particolare) Il numero binario si ottiene an-1an-2…a0 B Ö an-1*Bn-1+…+a1*B1+a0*B0=N N Ö an-1*Bn-1+…+a1*B+a0=N Dividendo il numero per la base B B, si ottiene: n 2 n 3 an-1*B +an-2*B +…+a1+a0/B Quozionte: N1=a N1 an-1*B Bn-2+a an-2*B Bn-3+…+a a1 Resto: a0 Il resto della divisione corrisponde all’ultima cifra a0 della d ll rappresentazione i iin b base B d dell numero N Applicando lo stesso procedimento al quoziente N1 si ottiene la penultima cifra a1 della rappresentazione in base B Ripetendo p la procedura p e’ possibile p ottenere tutte le altre cifre Ci si ferma quando il quoziente e’ uguale a 0 Codifica scrivendo la serie dei resti delle divisioni per 2, iniziando dall’ultimo resto ottenuto tt nut 573:2 286:2 286 2 143:2 71:2 35:2 17:2 8:2 4:2 2:2 1:2 Ö Ö Ö Ö Ö Ö Ö Ö Ö Ö 286 143 71 35 17 8 4 2 1 0 resto 1 resto t 0 resto 1 resto 1 resto 1 resto 1 resto 0 resto 0 resto 0 resto 1 14 -> a0 -> a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> a9 10001111012=57310 15 Codifica 16 Intervalli rappresentati Conversione DecimaleÖ DecimaleÖBinario Rappresentando pp gli g interi positivi p e lo zero in notazione binaria con n 18:2=9 resto 0 137:2=68 resto 1 9:2=4 resto 1 68:2=34 resto 0 4:2=2 resto 0 34:2=17 resto 0 2:2=1 resto 0 17:2=8 17:2 8 resto 1 1:2=0 resto 1 8:2=4 resto 0 4:2=2 resto 0 2:2=1 resto 0 12 0 1:2=0 resto t 1 100102=1810 n cifre (bit) si copre l’intervallo [0, 2 -1] n Si sfruttano tutte le 2 disposizioni Esempio: n=3 0 1 2 3 4 5 6 7 Codifica 17 Per i numerali esadecimali occorrono 16 cifre 18 Conversione esadecimale esadecimale--binario { 0,1, 0 1 …, 9 9,A,B,C,D,E,F A B C D E F} A ciascuna cifra esadecimale si fa corrispondere il gruppo di 4 bit che ne rappresenta il valore Esempio p F 5 7 A 3 1 Il valore delle cifre Codifica Conversioni tra base 16 e base 2 Il sistema esadecimale 000 001 010 011 100 00 101 110 111 NB Anche gli 0 non significativi devono essere rappresentati 100010012=13710 [0,7] 0,1, …, 9 hanno il valore consueto A vale 10, B vale 11, …, F vale 15 1111 0101 0111 Stesso meccanismo della notazione decimale pesata 1010 0011 0001 Conversione binario binario--esadecimale Esempio: E i rappresentazione t i di BAC16 Partendo da destra si fa corrispondere a ciascun gruppo di 4 o meno cifre binarie la cifra esadecimale che ne rappresenta il valore N= 11·16 N 62 + 10·16 0 61 + 12·16 60 = 2988 988 Si usano s sspesso ss st stringhe i h esadecimali s d im li per rappresentare s t stringhe binarie Conversione Decimale Ö Esadecimale? Rappresentazione più compatta: con sole 2 cifre esadecimali si rappresentano valori memorizzati in 8 bit Esempio: rappresentazione dei colori RGB, indirizzi di memoria, indirizzi MAC Codifica 19 Codifica 20 Interi positivi e negativi Rappresentazione appr s ntaz on con mo modulo u o e ssegno gno Per rappresentare un numero con segno, si usa: Finora abbiamo considerato solamente la rappresentazione dei numeri positivi (unsigned) Si utilizzano varie rappresentazioni per gli interi relativi Esempio Modulo e segno C Complemento l t a1 Complemento a 2 Eccesso n = 4 bit 5 = 0101 intervallo [[-7,+7] -5 = 1101 Osservazioni Per rappresentare gli interi relativi, a parità di cifre si dimezza l’intervallo dei valori assoluti Intervallo I t ll di rappresentazione t i simmetrico i t i Problema: doppia rappresentazione dello zero 9 Ad es. nel caso di 8 bit: 10000000 e 00000000 Codifica Ulteriore Ul i problema: bl addizione ddi i e sottrazione i complicata li d da segno dei numeri, modulo dei numeri 21 Rappresentazione in complemento a 1 Codifica 22 Rappresentazione pp in complemento p a2 Per i numeri positivi: positivi: si aggiunge uno 0 a sinistra della I numeri positivi hanno la stessa rappresentazione che in rappresentazione s t i d dell numero m iin bi binario i Es: 5=101 (3 cifre) Ö 0101 (4 cifre) Per un bit bi per il segno: 0 per +, 1 per n-1 bit per il modulo Intervallo di rappresentazione: [[-2n-1+1, +2n-1-1] complemento a 1 I negativi si ottengono sommando 1 alla loro rappresentazione in cambiare di segno g si complementa p il numerale bit a bit complemento a 1 Intervallo di rappresentazione con n bit: [[-2n-1, +2n-1-1] Notazione Posizionale: Pesi delle cifre: -2n-1 2n-2 ... 21 20 Consideriamo il numero espresso in base 2 xn-1xn-2…x0 Es 5= 0101 Ö -5=1010 I numerali positivi iniziano per 0, i negativi per 1 Intervallo di rappresentazione con n bit: [[-2n-1+1, +1 +2n-1-1] È una notazione posizionale Pesi delle cifre: ((--2n-1+1) 2n-2 ... 21 20 Esempio n = 4 bit intervallo di rappresentazione [[-7, +7] 5 = 0101 -5 = 1010 ((-7+2) Il bit più iù si significativo ifi ti xn-1 assume ss peso s negativo ti -2n-1 Quindi, il valore di un numero N espresso in complemento a 2 è n-2 Intervallo più esteso ma asimmetrico i=0 U sola Una l rappresentazione t i dello d ll zero N = -xn-12n-1 + Σ xi 2i Codifica 23 Codifica 24 Conversione decimaledecimale-binario (CP1 e CP2) Rappresentazione in complemento a 2 (2) 1. Esempio: Abbiamo già visto come fare se il numero X è Se S il numero X è negativo ti : n = 4 bit bi iintervallo ll [[-8, 8 +7] 7] 510 = 0101CP2 -510 = 1011CP2 (-8+2+1)) Prima regola pratica per complementare (calcolare la rappresentazione di -X a partire da quella di X): Effettuare il complemento di ogni bit di X ed aggiungere 1 28 = 256 < 347 < 512 = 29 intervallo con n bit: [[-2n-1 ,+2n-1-1] pertanto nmin=10 +347 347 in i notazione t i a 10 bit: bit Esempio (4 bit) 9 Complemento C l t di ttutti tti i bit bit: 1001 9 Aggiungere 1: 1001+1 = 1010CP2 = -610 -512 - 512 1 Stesso esempio 9 Gli ultimi 2 bit rimangono invariati: __10 9 Complementare gli altri 2 bit: 1010CP2 = -610 Codifica 256 128 64 32 0 1 0 1 0 complementando l t d a2 2: Seconda regola pratica per complementare: Partendo da destra si lasciano invariati tutti i bit fino al primo 1 compreso, e poi si complementa bit a bit Determinare il numero minimo di bit da usare (nmin) Convertire il valore assoluto di X in notazione a nmin bit Complementare l ((a 1 o 2) ill numerale l cosìì ottenuto Esempio: convertire ((-347)10 in CP2 9 +610 = 0110CP2 2. positivo 256 0 128 1 64 0 32 1 16 8 1 16 0 4 1 2 0 8 4 0 1 1 1 2 0 1 1 1 25 Codifica Rappresentazioni a confronto Addizioni binarie Decimale Le addizioni fra numerali si effettuano cifra a cifra +7 +6 +5 +4 +3 +2 +1 +0 -0 -1 -2 -3 -4 -5 -6 -7 -8 M&S 0111 0110 0101 0100 0011 0010 0001 0000 1000 1001 1010 1011 1100 1101 1110 1111 ----- CP1 0111 0110 0101 0100 0011 0010 0001 0000 1111 1110 1101 1100 1011 1010 1001 1000 ----- CP2 26 ((come iin d decimale) i l ) portando d il riporto i alla ll cifra if 0+0=0 successiva 0111 0110 0101 0100 0011 0010 0001 0000 ----1111 1110 1101 1100 1011 1010 1001 1000 0+1=1 1+0=1 Esempio 1 + 1 = 0 con il riporto di 1 3+2=5 0011 + 0010 = 0101 Se il numero di cifre non permette di rappresentare il risultato si ha un trabocco (overflow) nella propagazione i d dell riporto i t Codifica 27 Codifica 28 Aritmetica in CP2: operazione di negazione Overflow Sia A rappresentato in complemento a due Se si considerano due numeri interi senza segno rappresentati A = an-1an-2…a1a0 su n bit, si verifica la condizione di overflow ogni volta che il risultato supera 2n-1 Esempio Es i Sommiamo 5 e 11 su 4 bit (max rappr. = (5)10 = (0101)2 (11)10 = (1011)2 Abbiamo visto come la rappresentazione di -A si ottiene nel g modo seguente: 24-1=15) Si complementa ogni bit ai ottenendo il bit ai = Si considera la stringa ottenuta come un intero senza segno e si somma 1 1 se ai=0 0 se ai=1 Esempio: A=18 su 8 bit 0101+ 101 1= 10000 Rappresentazione di A in CP2: 00010010 Complemento (bit a bit): 11101101 Sommiamo 1: 11101101 + 00000001 = 11101110 11101110 = -27 + 26 + 25 + 23 + 22 + 21 = -18 Overflow Codifica 29 Codifica Addizioni in complemento a 2 La regola di overflow L’addizione per interi in complemento a due è identica a Si verifica un overflow nell’addizione di interi in complemento p a quella per interi senza segno 2 se e solo se Si somma dal bit meno significativo portando il riporto ad ogni p passo Si trascura l’eventuale riporto in uscita dal bit più significativo L’unica differenza è nel modo in cui si controlla l’overflow Sommiamo –3 e 4 su 4 bit -3 = 1101 1101 + +4 = 0100 Sommiamo 5 e 4 su 4 bit (max rappr. = 23-1=7) +5 = 0101 +4 = 0100 0101 + 0100 = 0100 = 10001 L’ultimo bit di riporto viene ignorato: il risultato è corretto Il risultato della somma di due interi positivi è un intero negativo Il risultato della somma di due interi negativi è un intero positivo Esempio Esempio E i 30 1001 Overflow: la somma di due interi positivi non può dare un intero negativo Codifica 31 Codifica 32 Sottrazioni in complemento a 2 Overflow per la sottrazione Può verificarsi l’overflow con la sottrazione? Per sottrarre ad un minuendo (M) un sottraendo (S) basta sommare M e –S Conosciamo la maniera semplice di calcolare la negazione di un numero in complemento a due Poiché la sottrazione è in effetti implementata Con una negazione g ed una addizione Vale la regola di overflow della somma Riusciamo a realizzare la sottrazione come se fosse una somma Risparmiando così sulla circuteria della ALU Si verifica se e soltanto se: 9 Il risultato della somma di due interi positivi è un intero negativo 9 Il risultato della somma di due interi negativi è un intero positivo Esercizio E i i Si! Calcolare 2 – 5 su 4 bit Calcolare ((––3)) – 1 su 4 bit C di i i di overflow Condizioni fl Codifica 33 Esercizio Calcolare il risultato delle seguenti operazioni binarie tra numerii iinterii con segno rappresentatii iin complemento l a 2 su 8 bit Scrivere l’equivalente q rappresentazione pp dei numeri m in decimale (verificando la correttezza del risultato ottenuto) 00001101 + 00111101 00001100 + 10110110 00010100 - 01101111 11110100 + 11101000 Codifica 35 Operazione A B Risultato <0 A+B ≥0 ≥0 A+B <0 <0 ≥0 A-B ≥0 <0 <0 A-B <0 ≥0 ≥0 Codifica 34