Modulo 2 – La rappresentazione delle informazoni

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