Calcolatori: Rappresentazione dei Dati e Aritmetica binaria 1
Codifica dell Informazione Ad un calcolatore le informazioni sono fornite, ad esempio tramite tastiera, come sequenze di caratteri alfanumerici (alfabeto esterno [6 lettere maiuscole e minuscole, 1 cifre decimali, segni di interpunzione, matematici e di controllo]); Tali caratteri sono rappresentati in memoria come sequenze di un alfabeto interno, secondo una codifica che associa ad ogni carattere dell alfabeto esterno, una e una sola sequenza di caratteri dell alfabeto interno: Alfabeto esterno Codifica Decodifica Alfabeto interno
Alfabeto Interno Binario Per rappresentare l informazione all interno di un calcolatore (alfabeto interno) si usa l alfabeto binario poiché le sue componenti possono trovarsi in due stati ben distinti (/1): Interruttore: aperto/chiuso, Disco: magnetizzato/smagnetizzato, Transistor: conduce corrente/non conduce corrente. I motivi di questa scelta sono i seguenti: 1. Alta tolleranza agli errori: non ci interessa conoscere ad esempio l intensità della corrente presente in un transistor.. Circuiti più semplici, tali da poter essere costruiti a basso costo. 3
Bit, Byte, Word Bit Binary digit (cifra binaria (1/)), è l unità informativa più elementare presente in un Calcolatore. Byte 8 bit, raggruppamento più comune nelle memorie e nei dispositivi I/O. Word (Parola), raggruppamento più grande del byte, si misura in n di byte. 4
Codici Binari I codici usati in un Calcolatore sono basati sul sistema di numerazione binario. Ha molta importanza il concetto di valore posizionale di ciascun bit all interno di una sequenza binaria. Il bit con il valore posizionale più elevato è quello più a sinistra, e viene chiamato bit più significativo. Analogamente, quello più a destra è il bit meno significativo. Es: 1 1 1 1 1 5
Codifica Dati Alfanumerici I codici usati per i dati alfanumerici sono: 1. EBCDIC (Extended Binary Code Decimal Interchange Code);. ASCII (American Standard Code for Information Interchange); 3. UNICODE. In tali codifiche le sequenze numeriche sono interpretate come stringhe (sequenze di caratteri) (es: 3114 non è un numero intero ma, per esempio, un numero di telefono), quindi non ci posso effettuare operazioni aritmetiche. 6
Codifica EBCDIC Ogni carattere è codificato in un byte: 1 3 4 5 6 7 ZONE DIGIT Si possono rappresentare 8 56 caratteri. Alcune codifiche non sono utilizzate, ovvero vengono rappresentati meno di 56 caratteri. Veniva utilizzato soprattutto su vecchi Calcolatori. 7
Codifica ASCII Ogni carattere è rappresentato su 8 bit; L ASCII originario era di 7 bit, forzato a 8 bit con il bit più significativo ; Quindi si utilizzavano solo metà delle 56 codifiche possibili, ovvero si rappresentavano 7 18 caratteri: 7 6 5 4 Successivamente è stato introdotto il codice ASCII esteso, con la possibilità di utilizzare anche il bit più significativo (quindi 56 caratteri rappresentabili). 3 1 8
Codifica ASCII I caratteri rappresentabili vengono classificati in tre categorie: Caratteri di comando: rappresentano un operazione da eseguire, ad esempio andare a capo. Caratteri alfanumerici: lettere (maiuscole, da A a Z, e minuscole da a a z ) e cifre (da a 9 ). Simboli: punteggiatura, operatori aritmetici e altri simboli di uso comune (ASCII esteso). Esempio: la lettera A corrisponde alla sequenza binaria 11 (65 1 ). 9
Codifica UNICODE Nella codifica ASCII caratteri internazionali di numerose lingue europee non sono rappresentati. Nessuno dell elevatissimo numero di simboli delle lingue asiatiche è rappresentato. UNICODE è uno standard definito dal consorzio UNICODE (fondato nel 199) e utilizza 16 o 3 bit. Comprende numerosi alfabeti non rappresentati nella codifica ASCII. 1
Codifica Dati Numerici Codifica numeri interi (Z): Modulo e segno; Complemento a ; Codifica numeri reali (R): Codifica in virgola fissa. Codifica in virgola mobile (floating point). 11
Codifica Dati Numerici Il calcolatore può fare operazioni su due numeri solo se sono codificati con lo stesso numero di bit. Si fissa il numero di bit k con cui si rappresenta un certo insieme di numeri (e.g. interi a 8 bit). Ogni numero di tale insieme deve essere rappresentato con k bit, eventualmente aggiungendo zeri a sinistra. Esempio per interi positivi a k 8 bit: (54) 1 (1111) 1
Codifica Interi: Codifica Modulo e Segno Si rappresenta un intero mediante la rappresentazione separata del modulo e del segno; Qualunque sia il numero dei bit usati, quello più significativo rappresenta il segno ( +; 1 -) (tale bit è simbolico, non ha peso); I restanti (n-1) bit (che hanno un peso in funzione della posizione) rappresentano la codifica binaria del modulo; 13
Codifica Interi: Codifica Modulo e Segno Rango di rappresentabilità della codifica modulo e segno: [ ( 1), + ( n 1 n 1 1)] Quindi, se n 8: [ 17, + 17] Esempio: Numero Segno Modulo +13 111-13 1 111 + - 1 NOTA: ci sono due rappresentazioni dello 14
Codifica Interi: Codifica Modulo e Segno La codifica Modulo e segno è poco utilizzata a causa della necessità di dover trattare diversamente il bit del Segno. Questo complica non poco le operazioni di somma e sottrazione a livello Hardware. Esempio: su 6 bit, l operazione 1 9 11-1 11 11 L operazione aritmetica viene svolta normalmente ma deve essere stabilita una regola per determinare il segno del risultato. 15
Codifica Interi: Codifica in Complemento a È la codifica più usata per rappresentare gli interi. Si basa sulla definizione di Complemento: C b k ( X ) b X in base b su k cifre. Si distingue il caso di X e X < : Rappresentazione in complemento a X X < C ( X ( ) X ) 16
Codifica Interi: Codifica in Complemento a Esempi in base su k 5 bit: X ( 1) 1 (11) c X ( 9) C( X ) (1) (11) ( 1111) 1 c 17
Proprietà della Codifica in Complemento a Forma polinomia della codifica in complemento a su n bit: n 1 n cn 1+ cn +... + c Il bit più significativo c n-1 ha peso (- n-1 ) (c n-1 non è un bit simbolico); Dalla forma polinomia in complemento a segue che anche per questa codifica i numeri negativi hanno il bit più significativo c n-1 1, mentre per quelli positivi c n-1 ; il bit più significativo può essere considerato il bit di segno; 18
Proprietà della Codifica in Complemento a Il numero negativo considerato dell esempio precedente: X ( ) 4 1 1111 + + + 16+ 4+ + 1 9 c Il Rango di rappresentabilità della codifica in Complemento a è, con n bit: [ c n 1 1, c n 1 13 n,..., c, c n 1 n 1 13 1, c n 1,..., c Quindi, se n 8, il Rango è: [ -18, +17 ] 1 ] 19
Proprietà della Codifica in Complemento a Esempi di rappresentazione di alcuni numeri in Complemento a, con n 8 (numero di bit): 1. 1 1-17. 1 1 1 1 1 1 1 + 17 3. 1 + 1 4. 5. 1 1 1 1 1 1 1 1-1 6. 1-18 NOTA: c è una sola rappresentazione dello
Somma e Sottrazione in Complemento a Il bit più significativo (che caratterizza il segno) è trattato allo stesso modo degli altri bit; Il risultato è espresso nella forma Complemento a ; Esempi: 1 1 1 1 1 1 1 1 1 1 5 + 1 1 1 + -5 + 1 1 1 1 1 1 + 31 1 1 1 1 1-31 1 1 1 1 56 1 1 1-56 (1) 1 1 1 bit di Carry Il bit di Carry (viene posto a 1 se si verifica un riporto al di fuori del bit più significativo) viene ignorato. 1
Somma e Sottrazione in Complemento a Ignorare il bit di Carry equivale ad applicare il Teorema del Complemento: con X X Y X + C Y, rappresent ati b ( Y ) su su k k cifre cifre in base Esempio, 1 9 su 5 bit: 11 + 1111-1 1 1 + 1 1 1 1 (1) 1 1 - (1) b () 1 1
Somma e Sottrazione in Complemento a Il Teorema del Complemento può essere formulato anche per il caso - X Y, caso in cui si avrà sicuramente un riporto al di fuori del bit più significativo; anche in questo caso il bit di Carry può essere ignorato (vedi esempio precedente -5-31). Infatti, dovendo il risultato dell operazione essere rappresentato in Complemento a, dovremo rappresentare - X Y come C (+X+Y), quindi C ( X + Y ) ( C C k ( X ) ( ( X ) + C k k X ) Y X Y C C ( Y ) ( X ) ( Y )) k Y Sottrarre k equivale ad ignorare il bit di Carry 3
4 Somma e Sottrazione in Complemento a Le operazioni di somma e sottrazione dei numeri interi codificati in Complemento a si eseguono svolgendo solo somme: X Y C X Y X Y X Y C Y X k Y C X Y X Y X k Y C X C Y X Y X Y X k k + + < + + + + ) ( ) ( ) ( ) ( : 3b) se cifre ) su ( : 3a) se 3) cifre ) su ( ) ( ) 1)
Overflow Se la somma o sottrazione di due interi dà un risultato minore/maggiore del Rango permesso dai bit di rappresentazione, si dice che si è verificato un Overflow e il risultato non è corretto; Il Calcolatore non è in grado di prevenire un errore di Overflow, ma questo è individuato solo dopo aver effettuato l operazione. Regole operative per riconoscere un risultato di Overflow con la codifica in Complemento a : i) riporto al di fuori del bit più significativo (Carry) e nessun riporto sul bit più significativo; ii) nessun riporto al di fuori del bit più significativo (no Carry) e riporto sul bit più significativo. 5
Esempio di Overflow Supponiamo di voler effettuare la somma 71 + 6 131 in Complemento a su 8 bit (Rango [-18, +17]), Il risultato della somma non è contenuto nel Rango, quindi verrà generato un errore di Overflow. 1 1 1 1 1 1 1 1 1 + 1 1 1 1 Carry 1 1 1 NOTA: il Calcolatore stabilisce l Overflow secondo la regola vista in precedenza 1 1 1-18 + + 1-15 6
Traslazione Logica (Shift logico) Consiste nello spostare a destra (shift logico a destra) o a sinistra (shift logico a sinistra) i bit di un numero binario. Nella traslazione a destra, il bit meno significativo viene perso, quello più significativo viene posto a. Traslare un numero binario a destra di una posizione equivale a dividerlo per (ottenete il Quoziente). Nella traslazione a sinistra, il bit più significativo viene perso, quello meno significativo viene posto a. Traslare un numero binario a sinistra di una posizione equivale a moltiplicarlo per. 7
Aritmetica dei Numeri Interi Con la codifica in Complemento a, la sottrazione si realizza con una complementazione (operazione semplicissima) ed un addizione. Si può realizzare un unico circuito che effettui somme e sottrazioni. Una moltiplicazione può essere realizzata tramite una sequenza di addizioni e di traslazioni a sinistra. Una divisione può essere realizzata tramite una sequenza di sottrazioni e di traslazioni a destra. Le operazioni più semplici (+) vengono eseguite da appositi circuiti a livello hardware. Operazioni più complesse (* e /) sono eseguite in termini di esecuzione di altre operazioni più semplici sotto il controllo di programmi (a livello firmware). 8
Codifica numeri Reali Per la rappresentazione dei numeri Reali è sufficiente giustapporre due numeri, uno intero e uno frazionario, rappresentati con le tecniche viste; Per esempio, il numero 1 1 1 1 1. 1 1 1 rappresentato in Modulo e segno dedicando 11 bit per la parte intera (compreso il segno) e 5 bit per la parte frazionaria, corrisponde al numero reale 331.6875 1 Questo tipo di rappresentazione viene detta in virgola fissa, perché un numero fisso di bit viene dedicato alla parte intera e frazionaria. 9
Codifica numeri Reali Mediante la tecnica della virgola fissa è possibile rappresentare un Rango troppo limitato di valori per la maggior parte delle applicazioni tecniche e scientifiche. Al fine di estendere il Rango, si adotta una tecnica basata sulla cosiddetta notazione esponenziale. Tale tecnica viene chiamata della virgola mobile (floating point). 456.768 +.456 1 4 331.6875 +3.316875 1 Nella notazione scientifica, al numero rappresentato sono associati due numeri: La Mantissa, e l esponente della base, ossia la Caratteristica. 3
Codifica numeri Reali A parità del numero di cifre dedicate alla rappresentazione dei Reali, la tecnica delle virgola mobile consente di estendere notevolmente il Rango di rappresentabilità: Supponiamo di disporre di 5 cifre: Virgola fissa: 3 cifre per la parte intera e cifre per quella frazionaria; Virgola mobile: 3 cifre per la Mantissa e cifre per la Caratteristica; Allora il Rango sarà: Virgola fissa: [ -999.99, -.1] [.1, 999.99] Virgola mobile: [ -999 1 99, -.1 1-99 ] [.1 1-99, 999 1 99 ] NOTA: L insieme che definisce il Rango è comunque un insieme discreto di valori, non continuo, ovvero ci saranno dei buchi relativi ad intervalli che non possono essere rappresentati. 31
Codifica Floating Point Corrisponde alla rappresentazione scientifica ± f s ± e f parte significativa o Mantissa s fattore di scala o base e esponente o Caratteristica Si utilizza la codifica floating point normalizzata in base ; un numero è scritto in notazione scientifica normalizzata se la virgola è posta subito a destra della prima cifra. 3
33 Codifica Floating Point { } ± ± 9 1 1 1 i e p f x f f x f f f f x,...,,.... Rappresentazione scientifica normalizzata in base : Rappresentazione scientifica normalizzata in base 1: ± ± 1 1 1 i e p f x f f x f f f f x ) (....
Codifica Floating Point I bit di rappresentazione sono suddivisi in tre parti: 1 bit di segno (bit simbolico); m bit per la parte frazionaria della Mantissa; n bit per la Caratteristica. x ± { segno f. f f... 1 p 1443 4 parte frazionaria della Mantissa f (1) ± e si rappresenta la Caratteristica 1 bit segno m bit mantissa n bit caratteristica Il bit f (sempre 1) e il fattore di scala (sempre (1) ) non si rappresentano. 34
Floating Point secondo lo Standard IEEE 1. Short Real: 4 byte 3 bit (singola precisione) 31 segno 3 3 caratteristica mantissa. Long Real: 8 byte 64 bit (doppia precisione) 63 segno 6 5 caratteristica 51 mantissa 3. Temporary Real: 1 byte 8 bit 79 78 64 63 segno caratteristica mantissa 35
Mantissa Codifiche di Mantissa e Caratteristica È codificata nella forma Modulo e Segno; Negli short e long real il bit più significativo della mantissa non è rappresentato essendo sempre 1; Non accade nei temporary real perché con essi possono essere rappresentati anche valori non normalizzati; Caratteristica c e+ t dove È codificata secondo la tecnica eccesso a t; Ovvero su k bit la caratteristica è data dal valore c: t k 1 1 caratteristica 1 16 17 18 55 esponente * -16-1 +1 +18 * Valore riservato per la rappresentazione dello k8 bit; t 7-117 36
Rappresentazione Floating Point del valore Consideriamo il valore corrispondente alla configurazione: s Mantissa (8 bit) Caratteristica (8 bit) Tale valore corrisponde al numero: 17 + 1. ( 1) 1 144444 444443 14 44 5. 48744 13 binario e c t 1111111 39 decimale Il valore rappresentato è molto piccolo ma non è zero; Per convenzione si assume che la configurazione precedente rappresenti lo zero. 37
Esempi di rappresentazioni Floating Point + 11 ( 11. ) ( 1. 1) ( ) m c e 1 ( 1) + t+ ( 11) + ( 1111111) ( 11) Spostamento a sinistra esp > 1 1 11 segno mantissa (8 bit) caratteristica (8 bit) 1 ( 11) + ( 1. 1) ( + ) m c e. 1 Spostamento a destra esp < ( 1) + t ( 1) + ( 1111111) ( 111111) 1 111111 segno mantissa (8 bit) caratteristica (8 bit) 38
Esempi di rappresentazioni Floating Point 1 segno 111 mantissa (3 bit) 11 caratteristica (8 bit) La Mantissa vale: ( 1.111) 1. 1875 Il numero della Caratteristica: ( 11) 96 La Caratteristica è su k 8 bit, quindi se t k-1-1 e 96 17-31 Il numero rappresentato è quindi 1.1875 31 5.67547 1 1 39
Proprietà della codifica Floating Point La rappresentazione della caratteristica in eccesso a t evita l uso del bit di segno per l esponente; Precisione numero di cifre decimali della parte frazionaria (corrisponde al minor modulo rappresentabile); Tipo di rappr. Floating point Short Long Temporary Rango ± 3. 39 1 ± 1. 8 1 ± 1. 19 1 38 38 493 Precisione ± 1. 18 1 ±. 3 1 ± 3.36 1 38 38 493 4
Aritmetica dei numeri Floating Point Anche nel caso dei numeri Floating Point può verificarsi una situazione di Overflow se il risultato di un operazione non appartiene al Rango. Si può parlare di errore di Underflow nel caso si tenti di rappresentare un numero più piccolo del valore di precisione (in pratica nell intorno dello zero). Per le operazioni di somma e moltiplicazione esistono appositi algoritmi (firmware) che trattano in maniera opportuna Mantissa e Caratteristica. 41
Precisione di Macchina Nei numeri frazionari in base 1, la precisione è data dal numero di cifre significative decimali usate. Nei Calcolatori i numeri frazionari si rappresentano mediante la tecnica della Virgola mobile (Floating Point). La precisione dei numeri Floating Point è legata al numero dei bit componenti la Mantissa. In ogni modo, la rappresentazione dei numeri reali nel Calcolatore è soggetta ad approssimazioni, e normalmente queste approssimazioni sono effettuate mediante troncamenti. 4
Errore di Troncamento Errore assoluto Errore relativo valore vero - valore rappresentato; valore vero - valore rappresentato valore vero Teorema Hp) Rappresentazione binaria di un numero frazionario X alla p-esima cifra dopo il punto; Ts) Errore assoluto di troncamento -p Dim: m + + m + + p i i i i Err. assoluto ci c i ( ci c i i i 1 i i 1 1444 4443 1444 4443 valore vero ) valore rappresentato 1 + + + + p ( p+ 1) i i i i c i se c i 1 1 i p+ i p+ i i 1 1 1 1 1 1 p 43
Rappresentazione di Immagini e Suoni Immagini e suoni sono caratterizzate da informazione definita di tipo continuo (o analogico). Il processo che permette di trasformare questo tipo di informazione in sequenze di bit prende il nome di Digitalizzazione. Più precisamente si dovrebbe parlare di operazione di Campionamento, attraverso la quale si riesce ad ottenere un approssimazione più o meno accurata dell informazione analogica. L informazione analogica viene in pratica discretizzata, e ciascun elemento della discretizzazione (campione) viene rappresentato con una sequenza di bit. L accuratezza del Campionamento dipende strettamente dal numero di bit dedicati alla rappresentazione dei vari Campioni, e dalla frequenza di Campionamento. 44
Rappresentazione di Immagini e Suoni Per quanto riguarda i suoni, l esempio più famoso è quello della musica memorizzata in un CD-ROM (Campionamento a 16 bit con frequenza di 44,1 Khz). Le immagini vengono rappresentate come Matrici di pixel, e a ciascun pixel è associato un codice numerico (ovviamente binario) rappresentante un determinato colore (8, 16 o 4 bit). Nel caso delle immagini il Campionamento determina la risoluzione con cui rappresenterò l immagine digitale (64 48, 8 6, 14 768,...); la risoluzione si misura in dpi (dots per inch). Come per i caratteri, anche per le immagini sono stati definiti alcuni standard di codifica, tra cui i più diffusi sono il TIFF, JPEG e PNG. 45