Corso di Laurea in Ingegneria Civile Politecnico di Bari Sede di Foggia Fondamenti di Informatica Anno Accademico 2011/2012 docente: Prof. Ing. Michele Salvemini Sommario I Codici I Sistemi di numerazione Posizionali e non posizionali Sistema binario Conversione decimale-binario Conversione binario-decimale Sistema Esadecimale Aritmetica binaria Addizione Sottrazione Errori Valori Numerici Negativi Modulo e segno Complemento a Due Valori Numerici Reali Virgola Fissa Virgola Mobile Codifica ASCII 2/31
I Codici Si definisce codice un insieme di elementi (C*) generati con simboli appartenenti ad un determinato insieme C seguendo determinate regole Es: l insieme delle parole di una lingua i cui simbolisono le lettere dell alfabeto l insieme dei numeri Naturali decimali Gli elaboratori rappresentano le informazioni utilizzando solo 2 simboli: 0, 1 In generale: con Ksimboli a disposizione e data nla lunghezza delle parole si possono rappresentare N=K n parole 3/31 I Sistemi di numerazione Posizionale e non Posizionale (1/2) Il valore di un numero può essere espresso con diverse rappresentazioni non posizionali la numerazione romana Simboli: I, V, X, L, C, D,M; Regola: un simbolo posto alla sinistra di uno che ne rappresenta un valore più grande è sottratto a quest ultimo altrimenti viene sommato; es: DCLXXIII = 500+100+50+10+10+1+1+1=673 Posizionali viene associato un pesoa ciascuna posizioneall interno della rappresentazione del numero; il valore del numero è ottenuto facendo la sommadei prodottidi ciascuna cifra per il relativo peso; es: la numerazione decimale 4/31
I Sistemi di numerazione Posizionale e non Posizionale (2/2) Nei sistemi posizionali, regola generale sia rla base della numerazione un numero Npuò essere rappresentato nelle seguenti forme: N = d n-1 d n-2 d n-3 d n-4 d n-5 d 0, d -1 d -2 d -3 d -m N = d n-1 r n-1 + d n-2 r n-2 + d n-3 r n-3 + +d 0 + d -1 r -1 + d -2 r -2 + +d -m r -m Esempio N = -m i=n-1 d i r i 0 d (r-1) nel sistema decimaler = 10, i simboli sono {0,1,2,3,4,5,6,7,8,9} 678 = 6*10 2 +7*10 1 +8*10 0 =600+70+8 5/31 Sistema Binario Gli elaboratori utilizzano un sistema di numerazione binario Richiede solo 2 simboli {0,1} BIT (binarydigit)= cifra binaria (unità di informazione fondamentale) Un bit può assumere come valori: 0/1 le informazioni sono organizzate in sequenze ordinate di bit 8 bit = 1 byte 1024 byte = 1 KB (kilobyte) 1024 KB = 1 MB (Megabyte) 1024 MB = 1 GB (Gigabyte) 6/31
Sistema Binario Conversione decimale-binario(1/4) Metodo delle divisioni successive (parte intera) L'algoritmo si basa sul calcolo iterativo del quoziente intero diviso la base. Il restodella divisione fornisce una cifra del numero nella nuova base a partire dalla cifra meno significativa. 1. Inizio; 2. Dividere il numero decimale per la base 3. Il resto della divisione è una cifra nella nuova base a partire dalla cifra meno significativa ; 4. Il quoziente della divisione intera è il nuovo dividendo; 5. Se quoziente 0 torna al punto 2; 6. Fine. 7/31 Sistema Binario Conversione decimale-binario(2/4) Esempio: (25) 10 = (?) 2 Dv B Q R 25 2 12 1 12 2 6 0 6 2 3 0 3 2 1 1 (25) 10 =(11001) 2 1 2 0 1 Dv B Q R Dividendo Base Quoziente Resto 8/31
Sistema Binario Conversione decimale-binario(3/4) parte frazionaria si moltiplica la parte frazionariaper la basedi arrivo; la parte intera del risultatofornisce una cifra nella nuova base a partire dalla cifra più significativa. 1. Inizio; 2. Moltiplicare la parte frazionaria del numero decimale per la base di arrivo; 3. Separare parte intera e parte frazionaria; 4. La parte intera dà una cifra nella nuova base a partire dalla cifra più significativa ; 5. Se non ottengo 0 o non raggiungo la precisione richiesta torna al punto 2; 6. Fine. 9/31 Sistema Binario Conversione decimale-binario(4/4) Esempio: (0.3125) 10 =(?) 2 0.3125 * 2 = 0.625 bit 0 0.625 *2 = 1.25 bit 1 0.25 *2 = 0.5 bit 0 0.5 *2 = 1.0 bit 1 0 *2 = 0 (0.3125) 10 =(.0101) 2 10/31
Sistema Binario Conversione binario-decimale Ricordando la formula (110101) 2 = 1*2 5 +1*2 4 +0*2 3 +1*2 2 +0*2 1 +1*2 0 = (53) 10 Bit più significativo Bit meno significativo 11/31 Sistema Esadecimale Proprietà: 16 simboli 10 numerici {0,1,2,3,4,5,6,7,8,9} 6 letterali {A,B,C,D,E,F} Esempio: (603) 10 = (??) 16 Dv B Q R 603 16 37 11 37 16 2 5 2 16 0 2 (603) 10 =(25B) 16 =H25B Dv B Q R Dividendo Base Quoziente Resto 12/31
Aritmetica Binaria Addizione (1/2) Segue le stesse regole dell addizione tra due numeri decimali: i due numeri sono incolonnati uno sopra l altro. si effettua la somma delle cifre di pari peso. Tabella di addizione Ai Bi Si Ri 0 0 0 0 0 1 1 0 1 0 1 0 1 1 0 1 Ai+Bi= Si Ri= Carryo Riporto 13/31 Aritmetica Binaria Addizione (2/2) Esempio: (30) 10 = (11110) 2 (20) 10 = (10100) 2 1 1 1 1 1 1 1 0 + 1 0 1 0 0 1 1 0 0 1 0 14/31
Aritmetica Binaria Sottrazione(1/2) Segue le stesse regole della sottrazione tra due numeri decimali: due numeri sono incolonnati uno sopra l altro. si effettua la sottrazione delle cifre di pari peso. Tabella di Sottrazione Ai B Si Pi 0 0 0 0 0 1 1 1 1 0 1 0 1 1 0 0 Ai -Bi = Si Pi = Borrowo Prestito 15/31 Aritmetica Binaria Sottrazione(2/2) Esempio (41) 10 = (101001) 2 (15) 10 = (001111) 2 0 1 10/0 1 10 1 0 1 0 0 1-0 0 1 1 1 1= 0 1 1 0 1 0 16/31
Aritmetica Binaria Errori In un elaboratore possono generarsi degli errori perché non è possibile rappresentare tutti gli infiniti numeri In particolare con nbitil maxvalore rappresentabile è 2 n -1 Es: 176 + 10110000 + 84= 01010100 = 260 00000100 = 4 ERRORE Il risultato è completamente errato perché è andato perso il contributo più significativo Questo perché abbiamo a disposizione solo nbit, il bit di riporto che si genera viene perduto: Overflow 17/31 Valori Numerici Negativi Modulo e Segno(1/2) Se si utilizzano n bit per rappresentare Nvalori decimali 0 N 2 n -1 Es: n = 8 bit 0 N 255 Come possiamo rappresentare i valori numerici negativi? Si potrebbe pensare di riservare il bit più significativo al segno ed attribuire il valore 0 per i numeri positivi e 1 per quelli negativi; n = 8bit -127 N +127 18/31
Valori Numerici Negativi Modulo e Segno(2/2) Esempio: n = 8 (+127) 10= (01111111) 2 (-127) 10= (11111111) 2 (+12) 10= (00001100) 2 Problema: (+0) 10 = (00000000) 2 (-0) 10 = (10000000) 2 19/31 Valori Numerici Negativi Complemento a due (1/3) Si inverte il valore di tutti i bit e poi si aggiunge uno al numero ottenuto, se rimane un resto lo si scarta Utilizza un bit per il segno: 0 (valori positivi) 1(valori negativi) n-1 bit per il modulo intervallo [-2 n-1, +2 n-1-1], Nel caso di 8 bit [-128,+127] Unica rappresentazione dello zero Esempio: Convertiamo (-12) 10 in complemento a 2 Converto 12 in base 2: = (00001100) 2 Inverto i valori dei Bit = C 1 (11110011) Aggiungo un 1 al complemento a 1 11110011+ 1 = 111110100 (complemento a 2) 20/31
Valori Numerici Negativi Complemento a due (2/3) Esempio: calcolare: ( -1-5) -1+ 11 111 1 11+ (-1 in complemento a 2) -5 11111011 (-5 in complemento a 2) -6 Carry(1) 11111010 (-6 in complemento a 2) Esempio: calcolare: (23 12) 23+ 00010111+ -12 11110100(-12 in complemento a 2) 11 Carry (1)00001011 21/31 Valori Numerici Negativi Complemento a due (3/3) Esempio: calcolare: (-65-65) (riporto generato) -65 10111111+ (-65 in complemento a 2) -65 10111111 (-65 in complemento a 2) -130 (1) 01111110 (+126 errore!! Oltre -128) Esempio: calcolare:65 + 65 (riporto ricevuto) 65+ 01000001+ 65 01000001 130 10000010 (-126 errore!! Oltre 127) Considerazione Occorre che il bit più significativo non sia coinvolto in nessun riporto (ne generandolo ne ricevendolo), oppure che lo sia totalmente (ossia lo riceva e lo generi) 22/31
Valori Numerici Reali Virgola Fissa Con un numero finito di cifre è solo possibile rappresentare un numero reale che approssima con un certo errore il numero reale dato. Notazione in virgola fissa Dedica parte delle cifre alla parte intera e le altre alla parte frazionaria Se degli n bit utilizzati per scrivere i numeri binari nel formato a virgola fissa, q bit sono usati per la parte frazionaria Esempio: XXX.YY 23/31 Valori Numerici Reali Rappresentazione in Eccesso In questa rappresentazione, il bit di segno non è contemplato si procede definendo un bias, un valore numerico con il quale traslare il numero desiderato. Consideriamo di nuovo il numero (+12) 10 in una notazione 10 ad 8 bit e scegliamo, la notazione in eccesso 128, dove 128 è il bias. (128 + (+12) = 140) 10 (10001100) 2 Il numero negativo (-12)10 si ottiene in modo analogo: (128 + (-12) = 116) 10 (01110100) 2 Anche in questo caso esiste una sola rappresentazione per lo zero 24/31
Valori Numerici Reali Virgola mobile (1/5) Numeri reali rappresentati tramite una coppia di numeri <m,e> x = m * b e m= mantissao frazione(determina la precisione) e= esponenteo caratteristica Esempi: 3,14 = 0,314 x 10 1 0,000001 = 0,1 x 10-5 1941 = 0,1941 x 10 4 25/31 Valori Numerici Reali Virgola mobile (2/5) Occorrerà prevedere spazio per tre quantità nella locazione di bit che rappresenta il numero segno esponente mantissa Problema: il numero +2.99792 x 10 5 ed il numero +299.792 x 10 3 sono indicati in modo diverso ma rappresentano lo stesso numero: questo crea potenziali problemi nella manipolazione e nel confronto fra numeri reali. Soluzione: forma normalizzata 26/31
Valori Numerici Reali Virgola mobile (3/5) Per ottenere una rappresentazione univoca di un numero in virgola mobile si adotta la seguente notazione: dato un numero reale, si sposta la virgola fino a portarla a sinistra dell ultima cifra diversa da zero; si riaggiusta l esponente per riequilibrare l ordine di grandezza. Consideriamo il numero +234.2678 x 10 4 Normalizzato: 234.2678 x 10 4 = 23.42678 x 10 5 = 2.342678 x 10 6 = 0.2342678 x 10 7 27/31 Valori Numerici Reali Virgola mobile (4/5) Rappresentiamo il numero reale (358) 10 in virgola mogile, supponendo di utilizzare 16 bit 1 per il segno,3 per l'esponente, 12 per la mantissa Forma Normalizzata: 0.358*10 3 l esponente lo mettiamo in forma binaria mediante la rappresentazione in eccesso con bias4 Esponente = ( 3 + 4 )=(7) 10 = (111) 2 Mantissa Normalizzata = (358) 10 = (101100110) 2 Segno = 0 (positivo) Rappresentazione in Floatingpoint 0111000101100110 0 111 000101100110 Segno Esponente Mantissa Normalizzata 28/31
Valori Numerici Reali Virgola mobile (5/5) Lo standard IEEE 754 Questo standard indica due formati possibili per la rappresentazione binaria di un numero reale 29/31 Codifica ASCII (1/2) Per realizzare la corrispondenza tra il linguaggio umano e quello della macchina si è convenuto di utilizzare raggruppamenti di 8 bit (1 byte) carattere alfanumerico cifra binaria A 01000001 1 00110001 il codice universalmente adottato come standard per l informatica è l'ascii (American Standard Code for Information Interchange). si possono rappresentare 128caratteri alfanumerici 7 bit. il codice ASCII estesoche permette di rappresentare di 256 caratteri, (128 di base con le varianti relative alle diverse lingue + i caratteri speciali e grafici) 8 Bit. Caratteristica comune ai due codici è la presenza dei primi 31 caratteri, chiamati caratteri di controllo, che producono un'azione e non sono stampabili 30/31
Codifica ASCII (1/2) Per i caratteri, nei moderni sistemi operativi è utilizzata la codifica UNICODE a 16 bit. simboli rappresentabili è 65536 31/31