Modulo 2 – La rappresentazione delle informazoni Prof. Antonio Scanu 1 Sistema binario La base 2 è la più piccola base possibile per un sistema di numerazione. Il suo alfabeto è costituito di due simboli {0,1}. I simboli si chiamano cifre binarie o bit dall'inglese binary digit. Un numero binario è pertanto formato da una sequenza di bit del tipo: 10110. Quando la base di rappresentazione del numero non è sottintesa, è bene esplicitarla con un pedice 101102, oppure (10110)2, per evitare l'ambiguità che potrebbe nascere con il numero decimale diecimila centodieci. Pertanto quando la base non è sottintesa è bene utilizzare una delle due rappresentazioni indicate sopra. La cifra più a destra di un numero binario si chiama cifra meno significativa, mentre la cifra più a sinistra si chiama cifra più significativa. Il sistema binario è utilizzato nei sistemi di calcolo digitale per rappresentare le informazioni. Il motivo per cui si usa il sistema binario è dettato dalla facilità di realizzare disposi tivi elettronici in grado di rappresentare cifre binarie: per esempio, un transistor utilizzato come interruttore (On, Off) oppure un condensatore (Carico, Scarico). 1.1 Conversione di un numero dalla base 10 alla base 2 Il procedimento (o algoritmo) per convertire un numero naturale N dalla base 10 alla base 2 è il seguente: Si divide ripetutamente il numero decimale per 2 fino ad ottenere un quoziente nullo. Il numero binario corrispondente è composto dai resti delle divisioni successive. La cifra più significativa è l'ultimo resto ottenuto, la meno significativa è il primo resto calcolato. Per esempio, per convertire in binario il numero decimale N= 13: R1=Resto (13/2)= 1 N= 13/2=6 R2=Resto (6/2)=0 N=6/2=3 R3=Resto(3/2)=1 N=3/2= 1 R4=Resto (1/2)=1 N= 1/2=0 Poiché N è diventato 0 il procedimento si ferma e il numero convertito è dato dalla sequenza dei resti, Nell'ordine inverso all'ordine con il quale sono stati ottenuti: N = R4 R3 R2 R1 = 1101 Un metodo veloce consiste nel scrivere una tabella simile alla seguente: Si scrive 0 se il numero è pari 1 se il numero dispari e proseguire il processo con il nume ro diviso a metà trascurando l’eventuale parte decimale 13 1 6 0 3 1 1 1 0 Il numero si ricava leggendo le cifre al contrario. N=11012 2 1.2 Conversione di un numero dalla base 2 alla base 10 Per convertire un numero dalla base binaria alla base decimale, basta applicare la definizione di numero: si moltiplica ciascuna cifra per la corrispondente potenza di 2, cioè della base. L'esponente è dato dalla posizione del bit. Il 1 bit meno significativo ha la posizione 0. Per esempio: 1010112= 1 * 25 + 0 * 24 + 1 * 23 + 0 * 23 + 1 * 21 + 1 * 20 = 32 + 8 + 2 + 1 =4310 1.3 Conversione numeri decimali Conversione della parte frazionaria di un numero dal sistema decimale al sistema binario. Per convertire un numero reale dobbiamo utilizzare due algoritmi: uno per convertire la parte intera e l'altro per convertire la parte frazionaria. Per la parte intera si utilizzano gli algoritmi di conversione visti per i numeri naturali, mentre per la parte frazionaria si opera nel seguente modo: si moltiplica per 2 la parte frazionaria; dal risultato si toglie la parte intera e si ripete il passo 1 fino a quando la parte frazionaria diventa nulla o è stato ottenuto un numero di cifre adeguato per esprimere la precisione. I valori interi ottenuti via via come risultati costituiscono, nell'ordine, le cifre del nu mero binario. Da quanto detto si capisce che i numeri frazionari, come vedremo, non sono rappresentati con questo procedimento in modo esatto, ma con una certa precisione. Infatti i numeri reali fanno parte di un insieme continuo, mentre i calcolatori digitali sono in grado di rappresentare insiemi discreti: questo comporta l'accettazione di una certa approssimazione (errore della rappresentazione). Frazione 0,6572 * 2 0,3144 * 2 0,6288 * 2 0,2576 * 2 0,5152 * 2 0,0394 * 2 Prodotto 1,3144 0,6288 1,2576 0,5152 1,0394 Intero 1 0 1 0 1 Cifra più significativa Cifra meno significativa Il numero convertito è 0,10101 2 come si può vedere, l'algoritmo non termina per cui bisogna arrestare il calcolo. Prima ci si ferma, meno preciso è il risultato della rappresentazione. Per convertire in binario un numero avente una parte frazionaria, si devono quindi applicare due algoritmi: uno per la parte intera, utilizzando uno dei metodi visti nei paragrafi precedenti e l'altro per la parte frazionaria, utilizzando l'algoritmo illustrato sopra. 3 1.4 Conversione di numeri binari con parte frazionaria nel sistema decimale Nel procedimento inverso, per la conversione di numeri con parte frazionaria da binario a decimale, conviene utilizzare il metodo generale di conversione, calcolando le potenze di 2 con esponente negativo: il primo bit a destra della virgola deve essere moltiplicato per 2-1 il secondo per 2-2, . . ., così via proseguendo con i bit verso destra. Per esempio, lo schema seguente illustra la conversione in decimale del numero binario 0,011001: (0.011001)=0* 2-1 + 1* 2-2 + 1 * 2-3 + 0 *2-4+ 0 * 2-5 + 1 * 2-6= 0+ 1/4 + 1/8 + 0 + 0 + 1/64 = (16 + 8 + 1) / 64 = 25 / 64 = 0,39062510 1.5 Aritmetica binaria Per programmare e comprendere la logica di funzionamento dei sistemi a microprocessore, è necessario saper effettuare le operazioni in aritmetica binaria. Le regole di calcolo, di seguito riportate, si riferiscono alle operazioni sui numeri naturali. Addizione Le regole dell'addizione di due bit sono le seguenti: 0+0=0 0+1=1 1+0=1 1 + 1 = 0 con riporto (carry) di 1 che si può anche scrivere come (1) 2 + (1)2 = (10)2 L'ultimo caso è analogo alla situazione che si verifica quando nel sistema decimale si addizionano due cifre la cui somma è maggiore o uguale alla base: si toglie dalla somma la base e si scrive il risultato riportando una unità alla cifra immediatamente a sinistra. Applicando la stessa regola alla base 2, la somma 1 + 1 produce 2, cioè un valore uguale alla base, per cui si deve togliere il valore della base e riportare 1 al bit immediatamente a sinistra: si ottiene quindi 0 con il riporto di 1. Lo schema seguente illustra l'addizione dei numeri binari 10110 e 11011 : 1 1 1 1 1 1 1 0 1 0 1 1 1 0 + 0 1 1 = 0 0 1 Riga dei riporti Si può controllare la correttezza del calcolo passando al sistema decimale: i due addendi corrispondono a 22 e 27 in base 10. Convertendo il risultato del calcolo precedente si ottiene 49 in decimale. Sottrazione Le regole della sottrazione di due bit sono le seguenti: 0-0=0 1-1=0 1-0=1 4 0 - 1 = 1 con prestito (borrow) di 1 Anche per la sottrazione l'ultimo caso è analogo alla situazione che si verifica nel sistema decimale: se una cifra è minore di quella che si deve sottrarre, occorre chiedere il prestito di una base alla cifra immediatamente a sinistra; la cifra che ottiene il prestito si incrementa di una base, mentre la cifra che ha fornito il prestito si decrementa di 1. Per esempio: nella sottrazione 25 - 9, il 5 diventa 15 dopo avere ottenuto il prestito, per cui si ha 6 con il prestito di 1 perciò il 2 (la decina) diventa 1. Nel sistema binario, per eseguire la sottrazione 10 - 1, la cifra 0 chiede un prestito incre mentandosi di una base, cioè diventa 2, per cui si ottiene 2 - 1 = 1, con il prestito di 1. Anche per il sistema binario, ovviamente, se la cifra che deve fornire il prestito è 0, la richiesta del prestito si propaga verso sinistra fino a trovare una cifra diversa da 0. In que sto caso, in modo analogo al sistema decimale, gli 0 diventano 1 (la base 2 - 1). Lo schema seguente illustra la sottrazione dei numeri binari 110010 e 10011: 1 1 0 1 0 0 2 (1+1) 0 0 1 2 0 1 1 1 1 0 Riga dei prestiti + = Si può controllare la correttezza del calcolo passando al sistema decimale: i due termini dell'operazione corrispondono a 25 e 19 in base 10. Convertendo il risultato del calcolo precedente si ottiene 6 in decimale. 2 Rappresentazione dei numeri naturali all'interno dei sistemi di calcolo I numeri naturali sono rappresentati, all'interno dei sistemi di calcolo, in binario con formato fisso: pertanto, se il numero necessita di un numero di bit inferiori a quello fornito dal formato scelto, le posizioni di bit non utilizzate sono riempite con 0 non significativi. Per esempio, se i numeri sono rappresentati con un formato a quattro bit e il numero è 102 in memoria il numero è rappresentato come 00102 (con 00 bit non significativi). 3 Rappresentazione dei numeri interi I numeri interi, dotati di segno e modulo, all'interno dei sistemi di calcolo si rappresenta no: con modulo e segno in complemento a 2. 3.1 Rappresentazione con modulo e segno In questo formato il bit più significativo è associato al segno, bit di segno, del numero mentre i bit rimanenti rappresentano il modulo. I numeri positivi hanno il bit di segno 0, mentre i numeri negativi hanno il bit di segno a 1. Per esempio: 5 il numero +20 si rappresenta con 010100 (il primo bit a sinistra è il bit di segno); il numero -20 si rappresenta con 110100. Nel caso in cui i bit del formato fossero maggiori di quelli strettamente necessari per rappresentare il numero, tra il bit di segno e il bit più significativo del numero sono inseriti zeri non significativi. Per esempio, le scritture 000011110 e 011110 oppure 110000 e 100010000 sono tra loro equivalenti. Per questa rappresentazione possiamo fare le seguenti considerazioni: esiste uno zero positivo (0000..0) e uno zero negativo (1000..0). Inoltre il modulo del più grande numero positivo è uguale a quello del più piccolo numero negativo rappresentabile con n bit. 3.2 Rappresentazione in complemento a 2 Definiamo complemento di un numero K di X cifre rispetto ad una base B, il numero Kc dato dalla seguente formula: Kc=BX - K. Vale, pertanto, la seguente relazione: Kc + K = BX Operativamente si procede nel seguente modo: Si fa il complemento alla base meno 1 (B-1), di ogni cifra al numero così ottenuto si aggiunge 1 Per esempio, calcoliamo il complemento alla base 10 del numero K=23810: poiché la base è 10 dobbiamo fare il complemento a 9 (10-1) di ogni cifra, per cui otteniamo 761; poi aggiungiamo 1 per avere il risultato finale Kc=762. Lo stesso risultato si può ottenere applicando la formula: Kc= 103-238=762. Per ottenere il complemento a 2 di un numero binario si procede eseguendo i seguenti passi: si calcola il complemento a 1 del numero; si addiziona il valore 1 al risultato ottenuto nel passo precedente. Il complemento a 1 di un numero si ottiene invertendo tutti i bit del numero; Il complemento a 1 di 0 è 1; il complemento a 1 di 1 è 0. Per esempio, il complemento a 2 del numero binario 10101 2 è: O1010 + 1 = 01011. Incolonnato è: 10101 Si sommano solo questi due numeri Numero originale 01010 + Complemento a 1 1 = 01011 Complemento a 2 Si può notare che nella rappresentazione in complemento a due tutti i numeri positivi hanno il primo bit uguale a 0 e tutti i numeri negativi hanno il primo bit uguale a 1. Tale bit non rappresenta il segno allo stesso modo della rappresentazione modulo e segno. 6 Per esempio, la coppia di numeri binari 01010 , 00001010 rappresentano lo stesso valore, come pure la coppia 10110, 11110110. Infatti, nella rappresentazione in complemento a 2 vale la regola di espansione del segno, cioè se il numero di bit a disposizione è superiore a quello strettamente necessario le po sizioni in più sono riempite con il bit di segno. Per esempio, la coppia di numeri binari 01010 , 00001010 rappresentano lo stesso valore, come pure la coppia 10110, 11110110. In questa rappresentazione abbiamo solamente lo zero positivo, indicato con una sequenza di bit con valori tutti a zero. Non esiste lo zero negativo, per cui il modulo del più grande numero negativo supera di 1 quello del più grande numero positivo. Supponiamo di avere a disposizione un formato di 4 bit. Il più grande numero positivo rappresentabile è 0111 ossia 7, lo zero è rappresentato da 0000. La configurazione 1000 non è da considerare come zero negativo, infatti essendo la rappresentazione di un numero negativo, il modulo è dato dal complemento a 2 del valore 000 cioè 111 + 1 = 1000 (8 in decimale), quindi alla configurazione 1000 corrisponde -8 in base 10. Generalizzando possiamo affermare che con n bit a disposizione per il modulo, i numeri positivi vanno da +O a +2n-1, mentre i numeri negativi vanno da -1 a -2n. All'interno dei sistemi di calcolo i numeri binari interi sono rappresentati con tre formati identici: essi differiscono solamente nel numero di bit, che definisce il campo dei valori che possono essere assunti dal numero. I numeri negativi sono rappresentati nella notazione in complemento a 2. Addizione e sottrazione in complemento a 2 Nel sistema decimale, l'operazione 724 - 325 = 399 può essere scritta come 724 + (1000-325) - 1000, dove il termine tra parentesi indica il complemento a 10 del sottraendo. Il risultato si ottiene addizionando il minuendo con il complemento a 10 del sottraen do e trascurando la cifra più significativa: 724 + 675 - 1000 = 399. Con la rappresentazione dei numeri interi in complemento a 2, la somma algebrica viene eseguita con un'addizione aritmetica, dopo aver sostituito i numeri negativi con i rispettivi complementi. Se occorre, si applica la regola dell'espansione del segno per uguagliare, alla lunghezza del numero più lungo, la lunghezza del numero più corto. Cioè l'operazione A - B viene eseguita come A + BC (la notazione BC indica il complemento alla base di B). Per esempio: l'operazione + 10 – 5 a sei bit si esegue nel seguente modo: si converte + 1010 in 010102 ; si converte +510 in 01012; si calcola 5C che è 1011 ; al primo numero si aggiunge, per raggiungere i 6 bit, uno 0 essendo un numero positivo. Diventa 001010; al secondo numero si aggiungono, per raggiungere i 6 bit, due 1 perché è negativo. Diventa 111011; Si passa poi alla somma: 7 1 1 1 1 Riporto 0 0 1 0 1 0 + 1 1 1 0 1 1 = 1 0 0 0 1 0 1 Il bit a sinistra del bit di segno viene scartato, perché il risultato deve essere un numero della stessa grandezza degli altri, cioè di 6 bit. Il risultato ha il bit di segno uguale a 0, per cui il numero è positivo; i bit rimanenti rappresentano l'ampiezza del numero, in questo caso 5. Quindi il risultato rappresenta il numero +5. Andiamo ad analizzare i quattro possibili casi: A+B A-B -A + B -A - B i numeri sono rappresentati in 8 bit e supponiamo che A sia maggiore di B R=A+B I due numeri sono entrambi positivi per cui si tratta di una semplice somma. Calcolo in decimale Calcolo in complemento a 2 +23 + 00010111 +12 = 00001100 +43 00100011 R=A-B In questo caso il primo termine è positivo e il secondo è negativo e poiché abbiamo supposto A maggiore di B il risultato sarà un numero positivo. Essendo il complemento a 2 di 00001100 2 (+1210), il numero 11110100 l’operazione diventa Calcolo in decimale Calcolo in complemento a 2 +23 + 00010111 + -12 = 11110100 = +11 100001011 La cifra in rosso è da non considerare perché stiamo lavorando a otto bit. R=-A+B In questo caso il primo termine è negativo e il secondo è positivo, ricordando l'ipotesi che A è maggiore in valore assoluto di B il risultato sarà un numero negativo che verrà scritto in complemento a 2. 8 Essendo il complemento a 2 di 00010111 2 (+2310) il numero 11101001 l’operazione diventa Calcolo in decimale Calcolo in complemento a 2 -23 + 11101001 + +12 = 00001100 = -11 11110101 Il risultato è giusto perché il complemento a 2 de numero negativo 11110101 e 000010112 cioè 1110 in valore assoluto R=-A-B Entrambi i termini sono negativi quindi li rappresenteremo utilizzando la formula del complemento a 2 Essendo il complemento a 2 di 001011112 (+2310) il numero 11101001 Essendo il complemento a 2 di 000011002 (+1210) il numero 11110100 si ha Calcolo in decimale Calcolo in complemento a 2 -23 + 11101001 + -12 = 11110100 = -35 111011101 Il risultato è giusto perché il complemento a 2 de numero negativo 11011101 e 001000112 cioè 3510 in valore assoluto Il risultato è un numero negativo scritto quindi in complemento a 2 (come nel caso 3) e inoltre ci sarà un riporto da non considerare (come nel caso 2). 4 Rappresentazione dei numeri reali I reali vengono rappresentati in due modi Virgola mobile Virgola fissa 4.1 Rappresentazione dei numeri reali in virgola mobile La rappresentazione dei numeri reali in virgola mobile (floating point) è nominata anche come notazione scientifica. Esempio di numero in notazione scientifica è il seguente: N=-1,721 * 10 3 . Possiamo rilevare tre parti: il segno -, la mantissa 1,721 e l'esponente (o caratteristica) +3. Per esempio tutte le rappresentazioni seguenti sono equivalenti: 17,8 * 101 = 1,78 * 102 = 0,178 * 103 = 178 * I00 Il formato utilizzato per i numeri reali in binario ha la seguente struttura: S 1 .XXXXXXX.. . X · 2E 9 Dove ogni x è un bit 0 o 1. S rappresenta il bit di segno E rappresenta l'esponente la parte intera è 1 che non viene memorizzata Il campo del segno è costituito da un singolo bit che ha valore 0, per indicare che il numero in virgola mobile è positivo, oppure 1 per indicare che il numero è negativo. Quindi quando un numero varia da positivo a negativo, cambia solo il bit di segno. N Si può affermare che nelle applicazioni scientifiche i numeri sono rappresentati praticamente in modo esatto e comunque l'errore non è rilevabile dalla sensibilità degli strumenti attualmente a disposizione. Il campo esponente specifica la potenza di 2 per cui va moltiplicata la mantissa per ottenere il valore del numero in virgola mobile. Per rendere possibili gli esponenti negativi, il campo esponente contiene la somma dell'effettivo esponente e di una costante positiva, detta bias (polarizzazione). Questo assicura che il campo esponente contenga sempre un numero positivo. Il bias vale 127 per la singola precisione (noi useremo solo questo tipo di formato ma ne esistono atri due ). La situazione è analoga ai voti di un'interrogazione: non sempre un'entità negativa è espressa con un numero negativo; se il voto dell'interrogazione è 4, pur es sendo un numero positivo, esso non rappresenta un'interrogazione conclusa positivamente. Per esempio, se l'esponente vale 1010, esso viene memorizzato come 127 10+ 1010 = 13710 Nel formato in singola precisione il campo esponente ha un'ampiezza di 8 bit, quindi 256 valori possibili: avendo fissato una costante di polarizzazione pari a 127, allo zero corrisponde un esponente -127 e a 255 un esponente 128. La mantissa è di ampiezza 24 bit. Lo zero in questa notazione non sarebbe rappresentabile applicando gli algoritmi di conversione, perché non si può scrivere nella forma 1.xxx: si assegna allora una configurazione prefissata formata da tutti 0 sia per l'esponente che per la mantissa, per cui esistono due zeri, +0 e -0. Per esempio, si consideri il numero in singola precisione rappresentato in memoria come 01000001111100000000000000000000 In esso: il segno è 0 per cui il numero è positivo, E = 10000001 = 129 quindi l'esponente è 129 - 127 = 2 la mantissa è 1,1111 inserendo il bit nascosto Il valore è quindi: (+(1,1111)*1010)2= 111,112= (+22+21+20+2-1+2-2)10 =(4+2+1+0,5+0,25)10 = +7,7510 L'esempio seguente illustra l'operazione inversa: rappresentare in memoria nella forma normalizzata in singola precisione il numero binario -0,000101010. Per rappresentare il numero in forma normalizzata si deve spostare la virgola di tre posizioni in avanti: -1,01010 * 2-3 Il segno è negativo quindi il primo bit è 1; 10 nel campo esponente si scrive 127 - 3 = 124, ossia 01111100 nel campo mantissa 01010000000000000000000 senza indicare il bit nascosto. La rappresentazione del numero diventa 101111100 01010000000000000000000 4.2 Reali in virgola fissa La rappresentazione dei numeri reali in virgola fissa utilizza un numero di cifre per la parte intera, un numero di cifre per la parte frazionaria e un bit per il segno: il punto decimale è mantenuto sempre nella stessa posizione. Per esempio, lo schema seguente illustra la rappresentazione dei numeri in un sistema di calcolo che utilizza un formato a 16 bit così organizzato: 1 bit per il segno, 9 bit per la par te intera e 6 bit per la parte frazionaria. Un sistema di questo tipo nella realtà utilizza la base 10, convertendo cifra per cifra, per poter convertire con esattezza anche la parte frazionaria. In alcune applicazioni, come in quelle economico e finanziarie, risulta inaccettabile un errore di conversione. 5 Codici efficienti alfanumerici Quando in un processo di comunicazione l'oggetto è un testo costituito non solo da cifre ma anche da caratteri alfabetici e caratteri speciali, occorre utilizzare i codici alfanumeri ci, che ovviamente possono avere una lunghezza di parola maggiore di 4. 5.1 Codice ASCII Tra i codici alfanumerici il più usato è il codice ASCII (American Standard Code for Information Interchange), approvato nel 1963 dall'istituto americano per gli standard ANSI (American National Standards Institute), che consente di rappresentare un numero elevato di caratteri, rendendo più agevole la codifica dei dati di varia natura. Il codice ASCII, nella versione standard, è un codice a 7 bit, con i quali è possibile codificare 138 simboli diversi. Essi possono essere divisi in due categorie: caratteri riproducibili, che hanno una stampigliatura sulle tastiere e sono visualizzabili sul monitor del computer, e non riproducibili, o di controllo, che non hanno una stampigliatura ma se ne vedono gli effetti quando si digitano. Per esempio il tasto Invio manda a capo il cursore senza produrre alcun carattere. Il codice ASCII è normalmente rappresentato con una tabella divisa in 8 colonne, ognuna delle quali contiene 16 righe di combinazioni. Esiste anche la versione del codice ASCII a 8 bit, detta codice ASCII esteso, a 256 caratteri: nei personal computer moderni, l'ottavo bit è stato utilizzato per aumentare l'insieme dei caratteri rappresentabili, con l'aggiunta di simboli grafici e di caratteri appartenenti alle diverse lingue 11 Tabella estesa (8 bit) 12 5.2 Codice Unicode Nessun codice, tra quelli utilizzati negli anni recenti, aveva un set di caratteri che includeva tutti i simboli utilizzati nella maggior parte dei paesi del mondo. Questo limite, prima dell'avvento di Internet e del Web non era significativo, perché il software di gestione veniva utilizzato nell'ambito di uno stesso paese. Nel Web l'utilizzo di un codice comune è es senziale per garantire la portabilità del software, in particolare i programmi che gestiscono i testi, e la visibilità dei siti Web in tutti i paesi del mondo. Per risolvere questi problemi è nato il consorzio Unicode senza fini di lucro, istituito per sviluppare, estendere e promuovere l'uso dello standard Unicode. I membri del consorzio rappresentano un'ampia gamma di aziende e di organizzazioni attive nella tecnologia dell'informazione. Unicode, ufficialmente chiamato Unicode Worldwide Character Standard, è un sistema per scambiare, elaborare e visualizzare testo scritto nelle diverse lingue del mondo moderno. Attualmente lo standard Unicode contiene 34168 caratteri supportati da 24 lingue diverse, tra le principali del mondo. I sistemi operativi Windows NT e Windows 2000 utilizzano il codice Unicode. L'adozione di Unicode nei siti web e nelle applicazioni client/server, rispetto all'utilizzo dei set di caratteri tradizionali, consente che un'unica versione di un software sia fruibile con piattaforme, lingue e paesi diversi, evitando la necessità di ridisegnare il software per ogni situazione specifica. L'obiettivo di Unicode è quello di essere semplice e consistente come il codice ASCII, ma anche di superare i limiti del codice ASCII, che consente solo la codifica dell'alfabeto latino. 6 Codifica delle immagini Per rappresentare le immagini all’interno di un sistema informatico è necessario digitalizzarle, ossia codificarle come sequenze di bit (0 o 1). Il processo di digitalizzazione avviene in due fasi: discretizzazione e quantizzazione. Discretizzazione: la superficie dell'immagine viene suddivisa in una griglia di celle denominate pixel - a ciascuna delle quali corrisponde un colore unico; questa caratteristica risulta chiaramente visibile se si effettua lo zoom di un'immagine digitale, come nel caso del dettaglio riportato nell'esempio. Quantizzazione: il colore di ciascuna delle celle (pixel) definite dalla griglia viene codificato mediante un valore numerico; nel caso di immagini in «bianco e nero» è possibile utilizzare lo schema seguente, dove al nero corrisponde O e al bianco il massimo numero che si intende utilizzare (normalmente si impiega un byte per memorizzare ogni singolo pixel di un'immagine digitale: in questo caso il valore del bianco è il massimo numero rappresentabile con 8 bit, cioè 255). La parte di immagine evidenziata nel dettaglio sottostante è numericamente rappresentata dalla griglia numerica a fianco. 13 In base alla risoluzione della tavolozza cromatica (Palette) o della scala di grigi adottata, si distinguono i diversi tipi di immagini digitalizzate di cui le più comuni sono: immagini binarie: ogni pixel viene visto come bianco o nero, e vengono quindi trascurate le mezze tinte che vengono trasformate in base a un valore di soglia in punti bianchi o neri. Ogni elemento (pixel) occuperà un solo bit. Questa modalità è utile per ridurre l'occupazione di memoria e viene usata soprattutto per i disegni tecnici. È la stessa tecnica utilizzata per inviare immagini tramite il sistema telefax; immagini in scala di grigio: ciascuna tonalità di grigio viene codificata con un certo numero di bit (da 2 a 8 generalmente) permettendo così la realizzazione di differenti sfumature di grigio (da 4 a 256). È utile soprattutto per disegni pittorici e architettonici; immagini a pseudocolori: simile alle scale di grigio, in questo caso vengono codificati da 4 a 256 differenti colori, ma non vengono permesse le sfumature; immagini a colori: si usano generalmente 3 byte (uno per ogni colore fondamentale) per ogni pixel, ossia 24 bit/pixel, così è possibile codificare oltre 16 milioni di colori, e si riesce a rappresentare con una buona fedeltà qualunque tipo di fotografia o di disegno. Il colore può essere generato componendo i tre colori primari , rosso, verde, e blu (RGB: red, green,blue). Ad ogni colore si associa una possibile sfu matura. Usando quindi 8 bit per colore si possono ottenere 256 sfumature per ogni colore primario che combinate insieme danno origine a 16,7 milioni di colori diversi (precisamente 16777216). Le immagini sono quindi memorizzate come sequenza (più o meno lunghe) di bit. Per poterle interpretare è necessario conoscere: la dimensione dell’immagine; la risoluzione geometrica espressa in DPI (dot per inch), cioè in quanti pixel viene suddivisa un'area di un pollice quadrato (6,4516 cm2). Un maggiore numero di pixel corrisponde infatti, com'è illustrato dalle figure che seguono, una miglio qualità visiva dei dettagli dell'immagine digitale. Risoluzioni tipiche sono: 800 x 600; 1024 x 768; 1280 x 1024. Se una immagine viene codificata con una particolare risoluzione essa potrà essere presentata su un 14 dispositivo a minore risoluzione ignorando o trasformando opportunamente alcuni dei bit che rappresentano ogni pixel. 6.1 Formati per le immagini BMP È il formato grafico di tipo bitmap di Microsoft Windows . Viene utilizzato da programmi come Paint e le immagini caratterizzate da questo formato possono essere usate come "sfondo" per il desktop di Windows. GIF Il GIF (Graphics Interchange Format), è un formato standard di memorizzazione di file grafici di tipo bitmap a scala di colore (quindi, in questo caso, RGB) con un massimo di 256 colori (o grigi). GIF, che si pronuncia "gif" o "ghif". Un esempio di GIF È probabilmente il for mato grafico più usato al mondo, poiché è dominante su Internet e nelle librerie shareware. Il formato GIF funziona bene sui grafici cosiddetti "al tratto", loghi, fumetti, sia in bianco e nero che a colori. Esso, però, non è altrettanto valido per le fotografie e le im magini sfumate, per le quali è meglio usare il formato JPEG. JPEG Il JPEG (Joint Photographic Experts Group) è un formato standard di compressione dei file grafici di tipo bitmap. Il suo nome deriva dal comitato dell’ lSO (International Standard Organization), che ne ha definito le specifiche. Il JPEG (si pronuncia "geipeg") è stato realiz zato per memorizzare immagini a colori o a toni di grigio di scene fotografiche naturali (in modo compresso) basandosi su elaborazioni matematiche dell'immagine digitalizzata. È un ottimo formato per la memorizzazione di fotografie, quadri, disegni molto sfumati con un elevato numero di colori (fino a 16777216) o a toni di grigio. 6.2 Esempi Esercizio guidato 1 Quanti byte occupa un'immagine di 200 x 100 pixel in bianco e nero? Conoscendo la risoluzione dell'immagine puoi trovare il numero di pixel che la compongono: 200 x 100 = 20000 pixel. Inoltre, nel caso di immagini in bianco e nero basta un solo bit per codificare il colore di ogni pixel e quindi saranno necessari 20000 bit per memoriz zare l'immagine. Per trovare il numero di byte basta fare quindi 20000/ 8 = 2500 byte. Esercizio guidato 2 Quanti byte occupa un'immagine di 200 x 100 pixel a 256 colori? Rispetto all'esercizio precedente, in questo cambia lo spazio occupato da ciascun pixel. Sai che l'immagine è a 256 colori. Per potere rappresentare 256 configurazioni diverse sono necessari 8 bit, ovvero 1 byte. L'immagine occuperà quindi 20000 x 1 byte = 20000 byte. 7 Codifica del suono L'audio digitale è codificato mediante una sequenza di valori numerici: per capire come questo sia possibile ricordiamo che il suono è un'onda meccanica che si propaga nell 'aria producendo variazioni di pressione che il nostro orecchio interpreta come suoni. 15 Perché il suono possa essere digitalizzato deve prima di tutto essere trasformato in un segnale elettrico: il microfono effettua questa trasformazione generando un'onda elettrica che riproduce fedelmente l'andamento nel tempo dell'onda sonora. L'analisi della variazione nel tempo dell'onda elettrica genera ta da un microfono medi ante uno strumento di misura elettronico mostra un andamento come il seguente: Nel grafico è possibile riconoscere le due caratteristiche fondamentali di un'onda sonora: la frequenza: è il numero di oscillazioni che l'onda effettua in un secondo e determina la tonalità del suono. Nella musica ogni singola nota ha una frequenza caratteristica. L'orecchio umano è in grado di percepire suoni la cui frequenza è compresa tra 20 e 20000 oscillazioni per secondo: l'unità di misura della frequenza che esprime il numero di oscillazioni per secondo è l'Hertz (Hz); l'ampiezza: è la quota raggiunta dall'onda in uno specifico istante temporale e determina l'intensità del suono. La digitalizzazione del suono, cioè la sua trasformazione in una sequenza di valori numerici, viene effettuata da un dispositivo elettronico denominato ADC (Analogic Digital Converter) che opera sull'onda elettrica generata da un microfono (o da un diverso dispositivo, per esempio l'amplificatore di uno strumento musicale elettrico) in due fasi: un Campionamento: l'ampiezza dell'onda sonora viene misurata a istanti regolari di tempo (questi particolari punti dell'onda sono gli unici presi in considerazione per la codifica del suono e sono deti campioni): Quantizzazione: una volta stabilito un valore corrispondente alla massima ampiezza (alla minima ampiezza corrisponde il valore O), la sequenza delle misure dell'ampiezza dell'onda viene codificata mediante una sequenza di numeri interi porzionali alle singole ampiezze: 16 Il valore massimo di quantizzazione è determinato dal numero di bit che si intende usare per rappresentare le misure delle ampiezze. Esempio: utilizzando 8 bit, il massimo valore di quantizzazione è pari a 2 8 - 1 = 255 È evidente che la precisione con cui l'onda viene codificata numericamente dipende sia dall'intervallo temporale che intercorre tra un punto di campionamento e il successivo, sia dal numero di bit usati per la quantizzazione. Infatti intervalli di campionamento grandi ridu cono il numero di punti mediante i quali l'onda viene rappresentata, mentre con valori massimi di quantizzazione piccoli la differenza di ampiezza tra un numero e il successivo si estende portando a codificare con lo stesso valore misure diverse: Esempi di formati digitali per campionamenti audio sono: WAV È lo stesso formato utilizzato per la registrazione dei CD Audio (PCM). È possibile utilizzare diversi livelli di qualità (8- 16 bit, da 11 a 44 kHz). Più alta è la qualità, maggiore è l'occu pazione di memoria. MP3 MP3 (o, più esattamente "MPEG-1/2 Audio Layer 3") è un formato audio che si basa su un algoritmo di compressione nato da studi della percezione umana del suono. È in grado di ridurre notevolmente la quantità di dati richiesti per riprodurre un suono. Nel suono esistono delle frequenze non percettibili dall'uomo che però occupano dello spazio. Eliminando queste, la dimensione del file viene drasticamente ridotta, senza per questo perdere in qualità del suono. 17 7.1 Esempi Esercizio guidato 1 Quanto spazio occupa un suono della durata di 8 secondi campionato a 200 Hz, in cui ogni campione occupa 4 byte? La frequenza di campionamento ti dice quanti campioni di suono vengono memorizzati in un secondo, 200 in questo caso. Avendo 8 secondi di suono avrai: 8 x 200 = 1600 campioni Poiché ogni campione richiede 4 byte, il suono occuperà 1600 x 4 = 6400 byte (circa 6,4 Kbyte). Esercizio guidato 2 Un secondo di suono campionato a 512 Hz occupa 1 KB. Quanti valori distinti si possono avere per i campioni. Se il campionamento è a 512 Hz, in un secondo di suono ci sono 512 campioni. Se l'occu pazione totale è di 1 KB, e cioè di 1024 bytes, ogni campione occupa: 1024 / 512 = 2 bytes, e cioè 16 bit Di conseguenza, per ogni campione si possono avere 216 = 65536 valori distinti. 8 Video digitale Forti di queste conoscenze possiamo affrontare ora il problema della digitalizzazione dei filmati, visto che questi ultimi altro non sono che immagini in movimento con accompagnamento sonoro. Proviamo a pensare a come è fatta una vecchia pellicola cinematografica: una successione di fotogrammi (ognuno dei quali corrisponde a una precisa immagine statica), accompagnata da una banda sonora (in sostanza immagini e suoni). La rappresentazione dei dati multimediali digitalizzare tanto le immagini che corrispondono ai singoli fotogrammi, quanto il sonoro che le accoppia. Appare immediatamente evidente che il numero di bit necessari per questa operazione aumenta in maniera eccezionale. Il numero di bit necessari alla codifica di un filmato sarà infatti tanto maggiore: quanto più lungo è il filmato; quanto maggiore è la sua risoluzione grafica, cioè quanto più fitta è la griglia che viene utilizzata per convertire in digitale i fotogrammi (frame) che compongono il filmato; quanto più ricca è la palette di colori impiegata; quanto maggiore è il numero di fotogrammi per secondo; quanto migliore è la qualità dell'audio (ossia la frequenza di campionamento). Vediamo, ora, cosa accadrebbe risparmiando sui bit: una bassa risoluzione grafica produrrebbe un filmato quadrettato, poco chiaro e non differenziato; una palette troppo limitata renderebbe approssimativi e poco realistici i colori visualizzati; 18 un numero troppo basso di frame per secondo darebbe vita a un filmato "a scatti" impreciso e poco scorrevole; una frequenza di campionamento audio troppo bassa pregiudicherebbe, ovviamente, la qualità del suono, così importante affinché un video possa stimolare quelle sensazioni di cui esso è il principale artefice. Relativamente ai formati di compressione video, lo standard più diffuso è I'MPEG 9 Esercizi 1. Considera il tuo nome e cognome separati da uno spazio e fornisci la rappresentazione ASCII 2. Utilizzando la codifica ASCII quanti bit sono necessari per rappresentare “Fratelli di italia l’Italia s’è desta” 3. Considerando la pagina di un libro tascabile con 2000 caratteri. Quante pagine posso memorizzare in 7000 kb. 4. Rappresenta i seguenti numeri 75, -76, -123, 125, 64 in complemento a due 5. Verifica gli esercizi precedenti passando dalla loro rappresentazione in complemento a due in quella decimale 6. Rappresentare i numeri decimali 3, -3 in complemento a due a 4 bit, 6 bit, 8 bit 7. Considera i seguenti numeri decimali : A= 23 , B=-12, C=-67, D=104 . Rappresenta i numeri nella forma a complemento a due con 16 bit e effettua le operazioni A+B, B-C, D+A,C+B e B-D 8. Rappresenta il numero reale 23,56 in A) virgola fissa B) virgola mobile a precisione singola C) virgola mobile a precisione doppia 9. Esegui i calcoli normalizzando i risultati ottenuti e rappresentandoli in virgola mobile a precisione singola a) 1050/1020; 3.5 *10-50 ; b) 3.78 *10-51; -0.0004 * 10-23 ; 234000; c) 0.0008 * 10-12 ; 1023 * (-10)33; -1023 *10-33 10.Rappresenta in base due con mantissa a 12 cifre ed esponente a 6 cifre i seguenti numeri -12.56; 0.003; -0.004; b) 23.45; -23.45; -0.02345; 11.Rappresentare in virgola mobile a precisione singola i seguenti numeri: 3.1459, -76.52, -0.06541, 987.06, 5, -7324, -0.003812, -1, 0.000007, 0 12.Convertire i numeri precedenti (se è possibile) in virgola fissa con un 5 bit per la parte intera e 7 bit per la parte decimale 13.Quanti pixel sono presenti in un immagine in bianco e nero di 300 X 200 14.Quanti byte se si utilizza 32 colori diversi 15.Quanti byte sono necessari per rappresentare 30 secondi di un brano con campionamento a 16 kHz e rappresentazione a 16 bit 16.Si vuole rappresentare in forma digitale un immagine di 400 X 200 pixel utilizzando una tavolozza di 256 colori differenti . Quanti byte sono necessari per memorizzare l’immagine 17.Si vuole migliorare l’immagine dell’immagine precedente aumentando di 65000 il numero dei colori. Quanti byte sono necessari per memorizzare l’immagine? 18.Quanti Byte sono necessari per memorizzare l’immagine precedente se risulta essere scomposta in 800 X 400 19 19.Si vuole misurare in forma digitale non compressa un brano musicale della durata di 3 minuti . si prevede un campionamento a 20 KHz utilizzando 16 bit per la profondità del suono quanti byte sono necessari per la memorizzazione. 20.Quanti byte sono necessari per rappresentare 30 secondi di un brano con campionamento a 16 kHz e rappresentazione a 16 bit 20