La rappresentazione delle informazioni Dr. Francesco Fabozzi Corso di Informatica
La matematica degli elaboratori In un elaboratore l’informazione (numero, testo, immagine, filmato, audio, ecc.) viene rappresentata con dei numeri (cioè con sequenze di cifre) Pertanto l’elaborazione dell’informazione si riduce in ultima analisi a compiere delle operazioni su dei dati numerici Quante cifre ho a disposizione in un elaboratore? Solo due cifre! Il motivo risiede nell’elettronica dell’elaboratore
La matematica degli elaboratori L’elaboratore è un dispositivo elettronico I circuiti elementari che lo compongono hanno solo due possibili stati fisici Stato On / Stato Off A ogni stato fisico è associata una cifra On = 1; Off = 0 Quindi la matematica di un elaboratore utilizza solo 2 cifre (matematica binaria) I numeri saranno sequenze di 0 e 1 Una cifra binaria si chiama bit (binary digit)
Bit Il bit (b) può considerarsi l’unità elementare di informazione Quante informazioni posso rappresentare con un bit? Poiché un bit può assumere solo due valori posso rappresentare solo due informazioni Acceso / Spento (1 / 0) Presente / Assente (1 / 0) Vero / Falso (1 / 0) Alto / Basso (1 / 0)
Sequenze di bit Per rappresentare più informazioni devo usare sequenze di bit Esempio: sequenza di due bit Con due bit posso scrivere 4 (= 22) sequenze distinte 00, 01, 10, 11 Quindi posso rappresentare al massimo 4 informazioni Esempio: i colori di un semaforo Verde (00), Giallo (01), Rosso (10)
Sequenze di bit Con 3 bit posso scrivere 8 ( = 23) sequenze distinte 000, 001, 010, 011, 100, 101, 110, 111 Quindi con tre bit posso rappresentare al massimo 8 informazioni Regola generale: con n bit posso codificare al massimo 2n informazioni Codificare un informazione = associare un’informazione a una sequenza di bit
Byte e Word Un sequenza di 8 bit viene detta Byte (B) Con un Byte posso codificare 256 informazioni Esempio: tutti i caratteri alfanumerici (numeri, lettere, segni di interpunzione) sono codificati in un elaboratore utilizzando un Byte Si chiama Word una sequenza di bit (tipicamente un multiplo del Byte) su cui un certo elaboratore esegue operazioni elementari Possiamo avere Word a 8, 16, 32 o 64 bit
Byte e Word bit Byte 1 16 bit- Word 1 1 32 bit- Word 1 1 1 1
kB, MB, GB, TB La memoria occupata dalle informazioni si misura nel numero di Byte necessari per rappresentarle. Ad esempio: Un file di testo occupa circa un migliaio di Byte Un file di immagine occupa circa un milione di Byte Dagli esempi risulta che è più comodo usare multipli del Byte I simboli sono simili a quelli del sistema metrico decimale (k, M, G, T) ma il significato è leggermente diverso
kB, MB, GB, TB Dalla tabella 1kB = 1 KiloByte = 1024 Byte ~ 103 Byte 1MB = 1 MegaByte = 1024 kB ~ 106 Byte 1GB = 1 GigaByte = 1024 MB ~ 109 Byte 1TB = 1 TeraByte = 1024 GB ~ 1012 Byte Multiplo Sigla Valore Valore approssimato Kilo k 210 = 1024 ~103 Mega M 220 = 1024k ~106 Giga G 230 = 1024 M ~109 Tera T 240 = 1024 G ~1012
Oltre il sistema decimale La matematica che usiamo correntemente è decimale Basata su 10 simboli (0, 1, 2, 3, 4, 5, 6, 7, 8, 9) Ciò nasce dal fatto che la nostra civiltà usa per contare le 10 dita delle mani Ma posso avere anche altri sistemi di numerazione che si differenziano per il numero di simboli usati Sistema binario, ottale, esadecimale, … Le regole di calcolo apprese per il sistema decimale si applicano anche agli altri sistemi
Sistemi numerici In un sistema di numerazione il numero di cifre utilizzato si chiama base del sistema Sistema binario = sistema in base 2 Sistema ottale = sistema in base 8 Sistema esadecimale = sistema in base 16 La numerazione in un sistema non decimale è uguale a quella nel sistema decimale I primi numeri sono rappresentati nell’ordine dai simboli disponibili Esauriti i simboli disponibili, si aggiunge una seconda cifra alla sinistra, mentre la prima cifra ritorna su tutti i possibili valori, e così via
Numerazione Decimale Binario Ottale Esadecimale 1 2 10 3 11 4 100 5 1 2 10 3 11 4 100 5 101 6 110 7 111 8 1000 9 1001 1010 12 A 1011 13 B 1100 14 C 1101 15 D 1110 16 E 1111 17 F
Sistemi posizionali I sistemi numerici visti sono posizionali Il valore assunto da una cifra dipende dalla posizione in cui si trova nel numero Infatti questo valore è uguale alla cifra moltiplicata per un fattore (peso) che dipende dalla posizione della cifra stessa nel numero peso = ( base )posizione dove posizione = 0, 1, 2, …
Sistemi posizionali La posizione si indica con un numero intero che parte da 0 0 corrisponde alla posizione della cifra più a destra Quindi: La cifra più a destra è quella con il peso più basso (=1) Cifra meno significativa (LSB = Least Significant Bit) La cifra più a sinistra è quella con il peso più alto Cifra più significativa (MSB = Most Significant Bit) Il valore totale di un numero è uguale alla somma dei valori associati ad ogni cifra
Sistemi posizionali Esempio: numero 524 in base 8 e 10 In base 10: 524 = 5 centinaia + 2 decine + 4 unità 5 100 + 2 10 + 4 1 Pesi in base 10 102 101 100 Pesi in base 8 82 81 80 In base 8: 5248 = 5 82 + 2 81 + 4 80 = 340
Conversione da base 10 a base n Metodo delle divisioni successive Esempio: convertiamo il numero 3410 a base 2 Divisione Quoziente Resto 34:2 17 0LSB 17:2 8 1 8:2 4 4:2 2 2:2 1:2 1MSB 3410 = 1000102
Conversione da base 2 a base 8 Si raggruppano le cifre a 3 a 3 a partire da destra e si convertono nel simbolo ottale Infatti con tre cifre binarie conto fino a 7 Se necessario si aggiungono zeri a sinistra Esempio: convertiamo il numero 11001011112 in ottale 1 | 100 | 101 | 111 001 | 100 | 101 | 111 1 4 5 7 11001011112 = 14578
Conversione da base 2 a base 16 Si raggruppano le cifre a 4 a 4 a partire da destra e si convertono nel simbolo esadecimale Infatti con 4 cifre binarie conto fino a 15 Se necessario si aggiungono zeri a sinistra Esempio: convertiamo il numero 11001011112 in esadecimale 11 | 0010 | 1111 0011 | 0010 | 1111 3 2 F 11001011112 = 32F16
Conversione da base 8 (16) a base 2 Si invertono le regole precedenti Si converte ogni cifra ottale in 3 cifre binarie Si converte ogni cifra esadecimale in 4 cifre binarie Esempio: convertiamo il numero A73F16 in binario A | 7 | 3 | F 1010 0111 0011 1111 A73F16 = 10100111001111112
Aritmetica binaria Stesse regole del calcolo in decimale Vediamo la somma binaria Somma di due bit Somma Risultato Riporto 0+0 0+1 1 1+0 1+1 Esempio: sommiamo in binario 10 e 11 (10 + 11 = 21): 1 0 1 0 + 1 0 1 1 = 1 0 1 0 1
Numeri binari relativi Per rappresentare interi con un segno si possono usare diverse tecniche Metodo più semplice:aggiungere un bit a sinistra per rappresentare il segno 0 = numero positivo, 1 = numero negativo Quindi se ho a disposizione 8 bit, 7 bit rappresentano il modulo e un bit rappresenta il segno Problemi: esiste un doppio 0 e la somma di due numeri relativi non dà sempre risultato corretto +10 1 Nota: Solo 7 bit usati per il modulo con 8 bit rappresento da -127 a +127 1 10
Numeri binari relativi Altre tecniche Complemento alla base Un numero negativo di modulo N è rappresentato con n cifre dal numero 2n-N Esempio: numero -5 con 4 cifre 16-5 = 11 1011 Non esiste doppio 0 Con 8 bit rappresento da -128 a +127 Sommo correttamente due numeri relativi Eccesso M Fissato M, il numero relativo N viene rappresentato dal numero N+M Esempio: eccesso 8: +5 1101; -5 0011 +5 – 5 = 0000 (corretto, perché mi limito a 4 cifre)
Numeri frazionari Quando si ha a che fare con numeri frazionari sorge il problema di rappresentare numeri molto grandi o molto piccoli senza eccedere col numero di bit Si usa la notazione in virgola mobile (floating point) Il numero viene scritto come prodotto di un numero (mantissa) per la base elevata a una certa potenza Esempio1: 325 000 000 000 = 3.25 1011 Esempio2: 0.000 000 023 = 2.3 10-8
Numeri frazionari Utilizzando la notazione floating point, poiché la base è fissata ( = 2) devo solo rappresentare segno, mantissa ed esponente L’esponente è rappresentato in eccesso M In base 2 la mantissa è sempre del tipo 1.F Quindi basta rappresentare solo F Esempio: se l’elaboratore rappresenta i dati con 32 bit 1 bit per il segno del numero 8 bit per l’esponente 23 bit per la mantissa
Precisione della rappresentazione La precisione della rappresentazione di un numero è data dal numero di bit usati per rappresentarlo N = (-1)S ·1.F ·2E+M Campo Singola precisione Doppia precisione Quadrupla precisione Bit totali 32 64 128 S 1 E 8 11 15 F 23 52 111 E max 255 2047 32767
Esempio Rappresentazione di un numero N in singola precisione 1) Esprimiamo il numero in notazione scientifica N = -10011101.10112 -1.001110110112 ·27 2) Bit di segno S = 1 3) Rappresentazione dell’esponente E in eccesso M = 128 E = 7+128 = 135 = 100001112 4) Rappresentazione della mantissa F F = 00000000000000111011011
Variabili booleane Una variabile booleana è una variabile che può assumere solo due valori vero / falso (detti “valori di verità” della variabile) Una variabile booleana è rappresentabile con un bit Ad esempio: 1= vero; 0 = falso
Funzioni booleane Posso anche avere funzioni di variabili booleane I valori di verità che una funzione assume in dipendenza dei possibili valori di verità delle variabili sono espressi mediante tabelle di verità
Funzioni NOT, OR, AND Semplici funzioni booleane caratterizzate dalle seguenti tabelle di verità: Funzione NOT ( ¯ ) Funzione OR ( + ) Funzione AND ( · ) A Ā 1 A B A+B 1 A B A·B 1
Codice ASCII Esiste uno standard internazionale per la codifica binaria dei caratteri alfanumerici che compaiono in un testo: codice ASCII Standard determinato dall’ANSI (organismo di standardizzazione internazionale) Un carattere è codificato con 7 bit Posso rappresentare fino a 128 caratteri (ASCII standard) Con un bit aggiuntivo codifico altri 128 caratteri Codici ASCII estesi (non standard)
Stringhe Una stringa è una successione ordinata di caratteri alfanumerici Parole, frasi, testi sono delle stringhe Esempio: “Oggi è una bella giornata” è una stringa di 26 caratteri NOTA: nel calcolo dei caratteri abbiamo considerato anche gli spazi bianchi e un carattere di fine stringa o g i è u n a b e l r t \0 \0 = carattere di fine stringa
Codifica di stringhe Una stringa è codificata come una sequenza di byte Un byte per ogni carattere alfanumerico codificato in ASCII Ma occorrono anche dei byte aggiuntivi Indicano la lunghezza della stringa o il carattere di fine stringa Vi possono essere dei byte aggiuntivi per codificare le informazioni di formattazione (font dei caratteri, grandezza dei caratteri, ecc.)
Codifica di vettori Si dice vettore (array) una sequenza ordinata di oggetti di uno stesso tipo E’ la generalizzazione del concetto di stringa Esempio: i risultati del compito scritto di Fisica (9 studenti partecipanti) possono essere organizzati in un vettore di 9 numeri: # studente 1 2 3 4 5 6 7 8 9 voto 22 18 28 25 30 12 20 21 Si può avere anche un vettore di vettori (vettori multidimensionali)
Analogico e digitale Una quantità analogica è una quantità che può assumere tutti gli infiniti valori contenuti in un certo intervallo Una quantità digitale è una quantità che può assumere solo un numero discreto di valori Esempi di quantità digitali: Un numero intero, un carattere codificato in ASCII, il tempo segnato da un cronometro digitale
Analogico e digitale Esempio di quantità analogica: la temperatura di una stanza nell’arco di una giornata varia con continuità in un certo intervallo di temperatura
Analogico e digitale Esempio di quantità analogica: un’onda sonora Segnale elettrico (registrato con un microfono) che rappresenta la voce umana
Digitalizzazione dell’informazione L’informazione in un computer viene immagazzinata in formato digitale Problema: come faccio a fare in modo che un computer possa operare su una quantità analogica (ad esempio il suono)? Necessità di digitalizzare l’informazione analogica (conversione analogico-digitale)
Digitalizzazione dell’informazione Riprendiamo l’esempio della temperatura nella stanza Procedura di campionamento: ogni ora misuro la temperatura della stanza Segnale analogico Le temperature ad ogni ora formano un insieme discreto di 24 valori che possono essere codificati con numeri binari e immagazzinati nella memoria del computer campionamento Segnale digitale
Codifica audio Campionamento del suono Operazione simile all’esempio della temperatura: prelevo un campione di segnale analogico ad intervalli di tempo regolari Ovviamente l’operazione va fatta a una frequenza maggiore di quella del segnale da campionare L’operazione di campionamento produce una serie di valori numerici in uscita Questi valori sono memorizzati in file audio (ad esempio file .mp3) Per poter ascoltare il suono a partire dal file occorre un dispositivo che fa l’operazione inversa (convertitore digitale-analogico)
Codifica di immagini Per digitalizzare un’immagine si divide l’immagine stessa in una griglia di punti detti pixel (picture element) Ad ogni pixel viene associata una sequenza di byte che codificano la posizione del punto nell’immagine e il suo colore Se aumenta il numero di pixel o la gamma dei colori che voglio riprodurre deve aumentare il numero di bit necessari per rappresentare queste informazioni
Codifica di immagini Con 1 bit posso riprodurre solo immagini in bianco e nero (senza sfumature di grigio) Quanti colori posso riprodurre con 24 bit? Risposta: 224 colori = 16.8 milioni di colori Il numero di pixel determina la risoluzione dell’immagine (cioè il livello di dettaglio) Maggiore è la risoluzione e più è possibile ingrandire l’immagine senza perdere in qualità Esempi di risoluzioni tipiche: 800x600, 1024x768
Codifica di immagini Aumento della risoluzione
Codifica di immagini Domanda: quanta memoria occupa un’immagine con risoluzione 1024x768 e che utilizza una profondità di colore di 8 bit? Risposta: 1024 x 768 x 1 Byte = 768 KB Questo tipo di immagine si chiama Bit Mapped (mappa di bit) ed il relativo file ha estensione .bmp I file .bmp occupano molta memoria per cui sono stati introdotti dei formati compressi Formato GIF (file con estensione .gif) Formato JPEG (file con estensione .jpg)
Controllo dell’errore Nella trasmissione o memorizzazione di dati sono necessarie tecniche per il controllo di eventuali errori Una semplice tecnica è quella del bit di parità Ad ogni Byte viene aggiunto un bit tale da rendere pari il numero complessivo di 1 nel Byte Se in ricezione o lettura trovo un numero dispari di 1 vuol dire che c’e’ stato un errore Il metodo funziona solo per errori singoli Per individuare l’errore (e correggerlo) è necessario un ulteriore Byte di parità
Bit di parità 1 1 Individuazione dell’errore Bit di parità 1 1 Byte di parità