Rappresentazione dell Informazione
Rappresentazione delle informazioni in codice binario Caratteri Naturali e Reali positivi Interi Razionali
Rappresentazione del testo Una stringa di bit per ogni simbolo (caratteri maiuscoli, caratteri minuscoli, cifre,...) ANSI (American National Standards Institute) ha adottato il codice ASCII (American Standard Code for Information Interchange): 7 bit per ogni simbolo + 0 come bit piu significativo =un byte
Tabella ASCII
Estensioni La tabella ASCII (datata 1961) è limitata: ad esempio non permette di rappresentare caratteri arabi o asiatici Nel 1991 è stato creato il set di caratteri UNICODE, che utilizza 2 byte per carattere, cioè in totale 65536 caratteri diversi.
Rappresentare numeri Il codice ASCII e inefficiente: per rappresentare numeri con n cifre servono n byte Meglio usare metodi che sfruttano la notazione binaria (base 2) Base 2: solo le cifre 0 e 1 invece che 0, 1,..., 9 (base 10)
Base 10 e base 2
Rappresentazione decimale Base 10 cifre da 0 a 9 Sequenza di cifre decimali d k-1 d 1 d 0 numero intero j=0 k-1 d j 10 j d k-1 x 10 k-1 + d 1 x 10 + d 0 Esempio: 102 in base 10 è 1x100 + 0x10 + 2x1
= 45 10 Rappresentazione binaria Base 2 cifre 0 e 1 Sequenza di cifre binarie d k-1 d 1 d 0 numero intero (stesso procedimento ma su base 2) j=0 k-1 d j 2 j Esempio: 0101101 2 = 1 2 5 + 1 2 3 + 1 2 2 + 1 2 0 = 32 + 8 + 4 + 1
Rappresentazione binaria Valore minimo di una sequenza di n cifre binarie: 000 0 (n volte) = 0 10 Valore massimo: 1111 111 (n volte) = 2 n-1 + 2 n-2 + + 2 2 + 2 1 + 2 0 = 2 n 1 Esempio con n=3: 111 = 2 2 + 2 + 1 = 7 = 2 3-1 Da 0 a 8: 0, 1, 10, 11, 100, 101, 110, 111, 1000 Test di parità: un numero binario è pari se e solo se il bit meno significativo è 0
Operazioni con i numeri binari Binario Base 2 Base 10 LSHIFT(X) con X binario, sposta le cifre di una posizione verso sinistra moltiplica per 2 il numero X RSHIFT(X) con X binario, sposta le cifre di una posizione verso destra restituisce il quoziente ed il resto della X = 1101 X = 2^3 + 2^2 + 2^0 X = 13 divisione di X per 2
Trasformazione di un numero in base 10 a numero binario 125 125 in binario è 125/2=62 resto 1 62/2=31 resto 0 31/2=15 resto 1 15/2=7 resto 1 7/2=3 resto 1 3/2=1 resto 1 1/2=0 resto 1 1111101 rappresenta 62 Etc. rappresenta 31
Trasformazione di un numero in base 10 a numero in base 8 Le operazioni LSHIFT(X) e RSHIFT(X) hanno lo stesso significato anche su numeri in base diversa da 2 125 125/8=15 resto 5 15/8=1 resto 7 1/8=0 resto 1 125 in base 8 è 175 = 8^2 + 7*8^1 + 5*8^0
Esercizio 1 Scrivere la rappresentazione ottale dei numeri decimali: 30 76 152
Somma binaria
Somma binaria Colonna per colonna, da destra a sinistra Riporto se la somma su una colonna supera la base Tre cifre binarie (prima riga, seconda riga, riporto), somma =1 se una o tre sono 1, riporto = 1 se almeno due sono 1 Riporto: 1 1 1 1 0 0 011100 2 + 110110 2 = ----------- 1010010 2
1 11 riporti 1010011 + 1100011 = 10110110 Si vuole quindi costruire un circuito per sommare due numeri binari
10000110 riporti 1010011 + 1100011 = 10110110 Iniziamo con un circuito che faccia la somma su una colonna Abbiamo tre cifre binarie X, Y, R in input mentre in output vogliamo ottenere la somma S ed il riporto R'
Tabella di verità X Y R S R'
Supponiamo di avere i circuiti che calcolano somma e riporto X Y R SOMMA S X Y R RIPORTO R'
Possiamo allora combinare i circuiti SOMMA e RIPORTO per ottenere il seguente circuito 1-ADD X Y R 1-ADD SOMMA RIPORTO S R'
Il circuito RIPORTO puo` essere realizzato nel seguente modo RIPORTO X R' Y R Basta infatti verificare la corrispondente tabella di verita
Il circuito SOMMA naturalmente puo' pure essere realizzato. A questo punto componendo K circuiti 1-ADD e` possibile realizzare un circuito K-ADD che somma due numeri binari di K cifre. Vediamo l'esempio della somma di due numeri binari di 4 cifre.
Somma di numeri di 4 bit Y 3 Y 2 Y 1 Y 0 X 3 X 2 X 1 X 0 riporto finale inutile R 3 R 2 R 1 R 0 1-add 1-add 1-add 1-add 0 0 riporto iniziale S 3 S 2 S 1 S 0 risultato
0 1 1 0 0 1 1 1 Esempio 0 1 1 0 1-add 1-add 1-add 1-add 0 1 1 0 1 0111 + 0110 = 1101
Attenzione Si e` trascurato il problema del cosiddetto overflow, cioe il risultato e troppo grande per essere contenuto nei bit disponibili. Per esempio: 0111 + 1110 = 10101
Esercizi 11011+ 1100 --------- 11111+ 1 ---------
Correzioni 1 11011+ 1100 --------- 100111 11111 11111+ 1 --------- 100000
Rappresentazione dei reali
Reali in notazione binaria b k-1 b k-2 b 2 b 1 b 0, b -1 b -2 b k-1 x 2 k-1 + b k-2 x 2 k-2 + + b 2 x 2 2 + b 1 x 2 + b 0 x 2 0 + b -1 x 2-1 + b -2 x 2-2 + Da decimale a binario: Per la parte intera, come sappiamo fare (metodo delle divisioni)
REALE--> BINARIO cosa significa una parte frazionaria binaria:.1101001 2-1 + 2-2 + 2-4 + 2-7
.1101001 2-1 2-2... moltiplicarlo per 2 significa spostare il punto di un posto a destra 1.101001 2 0 2-1...
Se abbiamo un valore decimale in base 10: 0.99 come troviamo la sua rappresentazione in base 2? Ragioniamo come segue: Supponiamo che.99 =.b b b...b (binario) 1 2 3 k Allora 2.99 = 1.98 = b 1.b 2 b 3...b k Quindi b 1 è 1 e.98 è rappresentato da.b 2 b 3...b k
Per trovare la rappresentazione binaria di un decimale lo moltiplichiamo per 2 ed osserviamo se 1 appare nella parte intera: rappresentazione binaria di.59.59 2= 1.18.18 2= 0.36.36 2= 0.72.72 2= 1.44.44 2= 0.88.88 2= 1.76....100101... dipende da quanti bit abbiamo
Esempio 18.59 18 10010 (metodo della divisione per 2).59.100101...(metodo della moltiplic. per 2) 10010.100101...
Esercizi Convertire i seguenti numeri binari in formato decimale: 11,01 101,111 10,1 Esprimere i seguenti valori in notazione binaria: 4.5 2.75 Eseguire le seguenti somme binarie: 1010,001+1,101 111,11+0,01
Correzione degli esercizi Convertire i seguenti numeri binari in formato decimale: 11,01 3 +1/4 = 13/4 = 3.25 101,111 5 + 7/8 = 47/8 = 5.87 10,1 2.5 Esprimere i seguenti valori in notazione binaria: 4.5 100,1 2.75 10,11 Eseguire le seguenti somme binarie: 1010,001 + 1,101 1011,110 111,11 + 0,01 1000,00
Rappresentazione degli interi
Rappresentazione dei Negativi Tre tipi di rappresentazione Modulo e Segno Complemento a 2 Notazione in eccesso
Rappresentazione Modulo e Segno Dati n bit, ne utilizziamo 1 per il segno e N-1 per il modulo 0 segno negativo 1 segno positivo Per esempio: 0101-5 1101 5 Gli interi rappresentabili con n bit [-(2 n-1-1), 2 n-1-1] Nell esempio [-(2 4-1 -1),2 4-1 -1]=[-7,7]
Rappresentazione Modulo e Segno Nella Tabella a destra sono rappresentati tutti i numeri binari esprimibili con 4 bit nella rappresentazione modulo e segno Esistono due rappresentazioni per lo 0! 0000 e 1000 L'operazione somma deve essere ridefinita: 1001 + 0001 = 0000 (oppure 1000) ma l'operazione somma che abbiamo definito restituirebbe 1010! 1111 7 1110 6 1101 5 1100 4 1011 3 1010 2 1001 1 1000 0 0000 0 0001-1 0010-2 0011-3 0100-4 0101-5 0110-6 0111-7
Notazione in complemento a 2 n bit per la notazione Nella realta n=32 Per comodita noi supponiamo n=4 Numeri positivi 0 si rappresenta con 4 zeri 0000 1 0001, 2 0010 e cosi come gia visto fino al massimo positivo rappresentabile 0111 7 Numeri negativi -1 si rappresenta con 4 uni 1111-1 -2 -> 1110, -3 1101 fino al minimo negativo rappresentabile 1000-8 Gli interi rappresentabili con n bit [-2 n-1, 2 n-1-1] Nell esempio [-2 4-1,2 4-1 -1]=[-8,7]
Complemento a due Corrisponde ad utilizzare la seguente base -2 3, 2 2, 2 1, 2 0 1010 normalmente corrisponderebbe a 2 3 +2 1 =10, nella nuova base andrebbe interpretato come -2 3 +2 1 = -6 Equivalentemente si può pensare che un numero negativo x sia rappresentato (su n bit) da x+2 n Esempio (4 bit): 2=0010,-2=-2+16=14=1110
Complemento a due su 3 e 4 bit
Relazione Binario Complemento a 2 0111 7 0110 6 0101 5 0100 4 0011 3 0010 2 0001 1 0000 0 1111-1 = 16-1 1110-2 = 16-2 1101-3 = 16-3 1100-4 = 16-4 1011-5 = 16-5 1010-6 = 16-6 1001-7 = 16-7 1000-8 = 16-8 La rappresentazione in complemento a 2 di un numero negativo equivale all'usuale rappresentazione binaria del numero 2 n + x (n è il numero di bit a disposizione) Esempio: -2 corrisponde alla rappresentazione binaria di 16-2 = 14 1110
Complemento a 2 1111-1 = 16-1 1110-2 = 16-2 1101-3 = 16-3 1100-4 = 16-4 1011-5 = 16-5 1010-6 = 16-6 1001-7 = 16-7 1000-8 = 16-8 0111 7 0110 6 0101 5 0100 4 0011 3 0010 2 0001 1 0000 0 Nella tabella a sinistra i numeri sono ordinati rispetto al valore binario Tutti i numeri maggiori di 7=0111 sono negativi
Complemento a due Bit piu a sinistra: segno (0 per positivi, 1 per negativi) Confrontiamo k e k: da destra a sinistra, uguali fino al primo 1 incluso, poi una il complemento dell altra Esempio (4 bit): 2=0010, -2=1110
Complemento a due: decodifica Perchè la regola da destra a sinistra, uguali fino al primo 1 incluso e poi una il complemento dell'altra? Dato x, cerchiamo y tale che x+y=0 0 1 1 0 + 0 1 1 0 + = 1 0 1 0 = ----------- ----------- 0 0 0 0 1 0 0 0 0 Poichè stiamo operando su 4 bit, possiamo troncare il quinto bit del risultato della somma senza alterare il risultato
Complemento a due: decodifica Se bit di segno =0 positivo, altrimenti negativo Se positivo, basta leggere gli altri bit Se negativo, scrivere gli stessi bit da destra a sinistra fino al primo 1, poi complementare, e poi leggere Es.: 1010 e negativo, si complementa ottenendo 0110 che corrisponde a 6, quindi -6 è il risultato finale Eccezione: l'operazione di complemento non funziona per il più piccolo numero negativo, ad es. (su 4 bit) 1000=-8 poiché +8 non è rappresentabile in complemento a 2 su 4 bit!
Da k a -k
Metodo alternativo: codifica e decodifica Intero positivo x complemento a due su n bit: se x 2 n-1-1 scrivo (x) 2, altrimenti non e rappresentabile Esempio: n=4, x=5, (5) 2 =0101, x=8>2 3-1=7 Intero negativo x complemento a due su n bit: se x -2 n-1 calcolo 2 n +(-x)=y e scrivo (y) 2 Esempio: n=4, x=-3 y=2 4-3=16-3=13 (13) 2 =1101 Compl. a due positivo (0 = bit + significativo) decimale: decodifica dal binario Esempio: n=4, 0111=(7) 2 Compl. a due negativo (1 = bit + significativo) decimale: decodifico dal binario a decimale, ottengo y e poi sottraggo y-2 n Esempio 1010 = (10) 2 10-16=-6
Schematizzando: da decimale a complemento 2 Controllo se il numero x è rappresentabile con n bit: Il numero è rappresentabile solo se -2 n-1 x 2 n 1 1 Se x è rappresentabile ed è un INTERO POSITIVO Calcolo la rappresentazione binaria di x, cioè (x) 2 Esempio: n=4, x=5, (5) 2 =0101, x=8>2 3-1=7 Se x è rappresentabile ed è un INTERO NEGATIVO Calcolo la rappresentazione binaria di x+2 n, cioè (2 n +x) 2 Esempio: n=4, x=-3 (2 4 +x)=-3+2 4 =16-3=13 (13) 2 =1101 Se x è rappresentabile ed è un INTERO NEGATIVO posso anche procedere nel modo seguente Calcolo la rappresentazione binaria del valore assoluto di x, cioè ( x ) 2, e poi calcolo l'opposto in binario, cioè il complemento di ( x ) 2 Esempio: n=4, x=-3, x =3, (3) 2 =0011, complemento di 0011=1101
Schematizzando: da complemento a 2 a decimale Dato un numero in complemento a 2 con n bit x=b 1 b 2 b 3 b 4, ricavo il segno osservando b 1 : se b 1 =0 positivo, altrimenti negativo Se x è POSITIVO Decodifico da binario a decimale: (2 2 b 2 + 2 1 b 3 +2 0 b 4 ) Esempio: n=4, x=0101, (2 2 +2 0 ) Se x è NEGATIVO Decodifico da binario a decimale, x=2 3 b 2 +2 2 b 2 + 2 1 b 3 +2 0 b 4, sottraggo 2 n da x, (x-2 n ) Esempio: n=4, 1101, x=13, (x-2 n )=(13-16)=-3 Se x è NEGATIVO posso anche Calcolare l'opposto del numero binario, cioè il suo complemento,es. 1101->0011, decodificare quest'ultimo numero, (0011) 2 =3, e poi calcolare il suo opposto, -1*3=-3
Somma in complemento a due Si utilizza il solito metodo Anche per sottrazione basta avere i circuiti per somma e complemento Es. (4 bit): 7-5 = 7 +(-5) = 0111 + 1011 = 0010 5 = 0101-5 = 1011 L eventuale n+1-simo bit generato a sinistra dal riporto deve essere troncato Esempio 0111+1011=10010 7-5 2
Esempi di somme
Overflow Si sommano due numeri positivi tali che il risultato e maggiore del massimo numero positivo rappresentabile con i bit fissati (lo stesso per somma di due negativi) Si ha un errore di overflow se: Sommando due positivi si ottiene un numero che inizia per 1: 0101+0100=1001, 5+4=-7 Sommando due negativi viene un numero che inizia per 0: 1011+1100= (1)0111, -5+(-4)= 7 Nei computer c e overflow con valori superiori a 2.147.483.647= 2 31
Esercizi Da complemento a 2 a base 10: 00011, 01111, 11100, 11010, 00000, 10000 Da base 10 a complemento a 2 su 8 bit: 6, -6, 13, -1, 0 Numero piu grande e piu piccolo per la notazione in complemento a 2 su 4, 6, 8 bit
Correzioni Da complemento a 2 a base 10: 00011 3, 01111 15, 11100-4, 11010-6, 00000 0, 10000-16 Da base 10 a complemento a 2 su 8 bit: 6, -6, 13, -1, 0 00000110, 11111010, 00001101, 11111111, 00000000 Numero piu grande e piu piccolo per la notazione in complemento a 2 su 4, 6, 8 bit Numero piu piccolo -2 n-1 (n=6-2 5 = -32) Numero piu grande 2 n-1-1 (n=6 2 5-1 = 31)