Codifica binaria dell`informazione

Transcript

Codifica binaria dell`informazione
Sommario
!
!
!
!
Codifica binaria dell'informazione
Elementi di Informatica
Docente: Giorgio Fumera
Codifica analogica e numerica
Codifica binaria
Codifica binaria di informazioni numeriche
Codifica binaria di informazioni non numeriche (testi, suoni,
immagini, ...)
Testi di riferimento:
Corso di Laurea in Edilizia
Facoltà di Architettura
A.A. 2009/2010
–
Sciuto et al., Introduzione ai sistemi informatici
–
Ceri et al., Informatica, arte e mestiere
2
Codifica dell'informazione: esempi
Codifica dell'informazione: esempi
3
4
Codifica dell'informazione: esempi
Codifica dell'informazione: esempi
5
Codifica analogica
6
Codifica analogica e numerica
Si vedano i testi di riferimento per una descrizione dettagliata
della codifica analogica e numerica
7
8
Codifica analogica
Codifica numerica
Ogni “valore” che l'informazione può assumere viene codificato
associandolo a una delle infinite configurazioni che possono
essere assunte da un mezzo fisico
Esempi
–
velocità di un'automobile o quantità di carburante nel serbatoio "
angolo d'inclinazione di una lancetta sul cruscotto
–
suoni (parole, musica): ampiezza dell'onda sonora nel tempo
" profondità del solco sulla superficie di un disco in vinile
Ogni “valore” che l'informazione può assumere viene codificato
associandolo a una configurazione, scelta tra un insieme
finito, che può essere assunta da un mezzo fisico
Se l'informazione può assumere infiniti valori (nello spazio, nel
tempo, ecc.), è necessaria un'approssimazione
–
–
campionamento (temporale, spaziale): i valori assunti
dall'informazione da codificare vengono misurati in un insieme finito
di istanti di tempo o di punti dello spazio
quantizzazione: si codifica solo un numero finito di valori,
approssimando gli altri
Esempi
–
–
quantità di carburante " indicatori luminosi (accesi o spenti)
suoni " sequenze di fori (presenza o assenza del foro) in posizioni
predefinite sulla superficie di un CD
9
Codifica numerica
Codifica numerica
Astraendo dal mezzo fisico:
–
la codifica numerica consiste nel rappresentare l'informazione
attraverso sequenze di simboli
–
ogni simbolo può assumere m possibili valori
!
m = 2: codifica binaria
!
m = 3: codifica “ternaria”
!
...
10
Due livelli:
!
codifica “logica”: quale sequenza di simboli associo a ogni
possibile valore dell'informazione da codificare?
!
codifica “fisica”: con quale configurazione fisica del mezzo
di memorizzazione/trasmissione/elaborazione rappresento i
possibili valori di ogni simbolo?
In questo corso ci interessiamo alla codifica numerica solo dal
punto di vista logico
La codifica numerica più diffusa è quella binaria. Perché?
minore probabilità di guasti ed errori, maggiore facilità nel progetto
dei dispositivi di memorizzazione, elaborazione e trasmissione
dell'informazione codificata, ...
11
12
Codifica binaria
Sistemi di numerazione posizionali
Ogni simbolo può assumere solo due valori, indicati per
convenzione con i simboli 0 e 1
Un simbolo è detto bit (binary digit): è la più piccola unità
d'informazione
Valore di un numero N espresso come sequenza di cifre an-1an-2
... a1a0 , a-1a-2... in una qualsiasi base b(b > 1, ai $ {0, b - 1}):
Quante possibili configurazioni possono essere assunte da
una sequenza di n bit?
1 bit: 2 configurazioni
0
2 bit: 2#2 configurazioni
3 bit: 2#2#2 configurazioni
...
0
0
1
1
1 0
0
1
0 1
...
Esempio (in base dieci):
1
1.024,25dieci = 1#103 + 0#102 + 2#101 + 4#100
+ 2#10-1 + 5#10-2
0 1
...
n bit: 2n configurazioni
13
Sistemi di numerazione posizionali
14
Sistemi di numerazione posizionali
Passaggio da una base diversa da dieci alla base dieci: facile
Passaggio dalla base dieci a un'altra base?
–3014otto = –(3#83 + 0#82 + 1#81 + 4#80)dieci = –1548dieci
–12,92dieci = ?otto
= – (1#121 + 2#120 + 11#12-1 + 4#12-2)otto = ?
+100101due = (1#25 + 0#24 + 0#23 + 1#22 + 0#21 + 1#20)dieci = +37dieci
+31,46dieci = ?due
–0,314cinque = –(3#5–1 + 1#5–2 + 4#5–3)dieci = –0,672dieci
= +(11#10101 + 1#10100 + 100#1010-1 + 110#1010-2)due = ?
+102,02tre = (1#32 + 0#31 + 2#30 + 0#3–1 + 2#3–2)dieci = +11,222...dieci
15
16
Rappresentazione della parte intera: algoritmo
delle divisioni successive per b
Passaggio dalla base dieci a un'altra base
Per facilitare il passaggio dalla rappresentazione di un numero
in base 10 a una qualsiasi altra base b si usa un metodo che
consente di eseguire calcoli solo in base dieci
–
rappresentazione della parte intera: algoritmo delle divisioni
successive per la base b
–
rappresentazione della parte frazionaria: algoritmo delle
moltiplicazioni successive per la base b
Dato un numero intero N, le cifre della sua rappresentazione in
base b sono pari alla sequenza dei resti delle divisioni per b
di N e dei quozienti successivi
NOTA: nel seguito si indica con il simbolo mod l'operatore
aritmetico modulo, che restituisce il resto della divisione tra
due numeri interi (es.: 7 mod 2 = 1)
17
Rappresentazione della parte intera: algoritmo
delle divisioni successive per b
18
Rappresentazione della parte intera: algoritmo
delle divisioni successive per b
Si prosegue fino a trovare Nn=0 per un certo valore di n
N = N1#b + R0 (N1 = N/b, R0 = N mod b)
Il valore di N può quindi essere scritto come:
se N1 % 0, allora N1 = N2#b + R1 (N2 = N1/b, R1 = N1 mod b),
quindi N può essere riscritto come:
N = (N2#b + R1)#b + R0 = N2#b2 + R1#b1 + R0#b0
N = Rn-1#bn-1 + Rn-2#bn-2 + ... + R1#b1 + R0#b0
se N2 % 0, allora N2 = N3#b + R2 (N3 = N2/b, R2 = N2 mod b),
quindi N può essere riscritto come:
N = (N3#b + R2)#b2 + R1#b1 + R0#b0
Questa espressione è una somma di potenze della base b.
Inoltre, i coefficienti Ri (i = 0, ..., n-1) sono numeri interi
nell'insieme {0, 1, ..., b-1}, poiché sono resti di divisioni per
b. Quindi le cifre della rappresentazione di N in base b
corrispondono alla sequenza dei resti: Rn-1 Rn-2 ... R1 R0
= N3#b3 + R2#b2 + R1#b1 + R0#b0
...
19
20
Rappresentazione della parte intera: algoritmo
delle divisioni successive per b
Rappresentazione della parte frazionaria: algoritmo
delle moltiplicazioni successive per b
Dato un numero frazionario F < 1, si indichino le cifre della sua
rappresentazione in base b come segue:
F = 0 , c-1c-2c-3 ... = c-1#b-1 + c-2#b-2 + c-3#b-3 + ...
Esempio: rappresentazione di 12dieci in base due
N
N1
N2
N3
N4
12
6
3
1
0
0
0
1
1
R0
R1
R2
R3
(si ricordi che ci $ {0, b - 1})
Moltiplicando F per b si ottiene:
F#b = c-1#b0 + c-2#b-1 + c-3#b-2 + ... = I1 + F1
dove I1 è la parte intera di F´b, pari a c-1, e F1 è la parte
Quindi: 12dieci = 1100due
frazionaria, pari a c-2#b-1 + c-3#b-2 + ...
Quindi, la prima cifra c-1 è la parte intera di F#b
(continua nella pagina successiva)
21
Rappresentazione della parte frazionaria: algoritmo
delle moltiplicazioni successive per b
22
Rappresentazione della parte frazionaria: algoritmo
delle moltiplicazioni successive per b
Moltiplicando F1 per b si ottiene:
Esempio: rappresentazione di F = 0,625dieci in base due
F1#b = c-2#b0 + c-3#b-1 + ... = I2 + F2
dove I2 è la parte intera di F1#b, pari a c-2, e F2 è la parte
0,625 # 2 = 1,25 = 1 + 0,25 (I1 = 1, F1 = 0,25)
frazionaria, pari a c-3#b-1 + ...
0,25 # 2 = 0,5 = 0 + 0,5 (I2 = 0, F2 = 0,5)
Quindi, la seconda cifra c-2 è la parte intera di F1#b
0,5 # 2 = 1,0 = 1 + 0 (I3 = 1, F3 = 0)
Si continua in questo modo, arrestandosi quando
–
si ottiene Fn+1 = 0, per un certo valore di n, oppure
–
si raggiunge il numero n di cifre frazionarie desiderato. Si noti che la
rappresentazione di un numero frazionario può avere infinite cifre: in
questo caso è necessaria un'approssimazione (es.: 1/3 in base dieci si
scrive come 0,3333...)
23
Poiché si è ottenuta una parte frazionaria nulla, il numero F
può essere espresso con un numero finito di cifre in base due
(in questo caso, tre cifre) e il procedimento si arresta.
Quindi:
0,625dieci = 0,101due
24
Operazioni su numeri in base due
Codifica binaria dei numeri
Si eseguono con gli stessi principi che si usano quando si
rappresentano i numeri in base dieci (“riporti” e “prestiti”
per addizioni e sottrazioni, ...)
Le tecniche di codifica binaria dei numeri sfruttano la
rappresentazione in base due dei numeri
La situazione più comune nei calcolatori (e non solo) consiste
nel codificare il valore di qualsiasi numero usando un numero
n predefinito di bit (di norma n è pari al numero di bit di una
cella della memoria principale)
Esempio: 9dieci + 3dieci = 12dieci
In base due (si noti che 1due + 1due = 10due):
1001 +
11 =
1100
Di seguito si descrive la codifica binaria di
–
numeri naturali
–
numeri interi (segno e valore, complemento a due)
–
numeri reali (virgola fissa, virgola mobile)
25
Codifica binaria dei numeri naturali
!
!
26
Codifica binaria dei numeri naturali
Insieme dei numeri naturali (compreso lo 0):
{0, 1, 2, 3, ... }
È un insieme infinito, ma con una sequenza finita di simboli
in una qualsiasi codifica numerica è possibile codificarne solo
un sottoinsieme finito
In codifica binaria, con n bit si possono codificare solo 2n
numeri naturali diversi: quali?
Una possibile scelta: {0, 1, 2, 3, ..., 2n - 1}
Es.: se n = 3, si codificano i numeri {0, 1, ..., 7}
27
!
Con quale configurazione degli n bit si codifica ogni numero
in {0, 1, 2, 3, ..., 2n – 1}?
La scelta più naturale è la seguente.
Sfruttando l'analogia tra le due cifre 0 e 1 della
rappresentazione in base due dei numeri, e i due simboli 0 e
1 usati per convenzione nella codifica binaria, ogni numero
viene codificato con la sequenza di n bit corrispondente alle
n cifre meno significative (cioè con “peso” minore) della sua
rappresentazione in base due
28
Codifica binaria dei numeri naturali
Codifica binaria dei numeri interi: segno e valore
Esempio: n = 3
Rappresentazione in base due
!
Codifica binaria
0dieci = 0due = 000due
000
1dieci = 1due = 001due
001
2dieci = 10due = 010due
010
3dieci = 11due = 011due
011
4dieci = 100due
100
5dieci = 101due
101
6dieci = 110due
110
7dieci = 111due
111
!
!
Insieme dei numeri interi: {..., -3, -2, -1, 0, 1, 2, 3, ... }
È un insieme infinito
In codifica binaria, con n bit si possono codificare solo 2n
numeri interi diversi: quali?
Una possibile scelta: si codificano separatamente il segno e
il valore assoluto
–
segno: due valori (positivo e negativo), basta un bit. Due possibiltà:
la più comune: positivo " 0, negativo " 1
–
restano n - 1 bit per codificare il valore assoluto: si possono
codificare 2n-1 valori assoluti diversi. Quali? La scelta più naturale
consiste nel codificare i valori {0, 1, 2, ..., 2n-1 – 1}
Quindi l'insieme dei valori codificabili è
{-(2n-1 – 1), ..., +2n-1 – 1}
Es.: se n = 4, si codificano i numeri {–7, –6, ..., +6, +7}
29
Codifica binaria dei numeri interi: segno e valore
30
Codifica binaria dei numeri interi: segno e valore
Con quale configurazione degli n bit si codifica ogni numero
in {–(2n-1 – 1), ..., +2n-1 – 1}?
Esempio: n = 3
Rappresentazione in base due
Codifica binaria
(il bit a sinistra codifica il segno)
Per convenzione, il bit di segno è quello più a sinistra. Per
codificare il valore assoluto, tra tutte le configurazioni a
disposizione si sceglia la stessa della codifica dei numeri
naturali: il valore assoluto di ogni numero viene codificato
con la sequenza di n – 1 bit corrispondente alle n -1 cifre
meno significative della sua rappresentazione in base due
31
-3dieci = -11due
111
-2dieci = -10due
110
-1dieci = -1due = -01due
101
-0dieci = -0due = -00due
100
+0dieci = +0due = +00due
000
+1dieci = +1due = +01due
001
+2dieci = +10due
010
+3dieci = +11due
011
32
Codifica binaria dei numeri interi:
complemento a due
Codifica binaria dei numeri interi: segno e valore
Nota: il valore zero è codificato con due sequenze diverse,
corrispondenti a –0 e +0
–
–
si “spreca” una configurazione, che potrebbe invece essere usata per
codificare un numero all'esterno dell'intervallo
{–(2n-1 – 1), ..., +2n-1 – 1}, per es. –2n-1 oppure +2n-1
Con n bit si sceglie di codificare i 2n valori nell'insieme
{–2n–1, ..., +2n–1 – 1}
(si aggiunge il valore –2n rispetto alla codifica in segno e
valore). La codifica è definita come segue:
–
i 2n–1 valori non negativi {0, 1, ..., +2n–1 – 1} vengono codificati come
nella codifica in segno e valore; in particolare, lo zero viene
associato alla sequenza di n bit 0...0 (quindi il valore del bit più a
sinistra è sempre 0)
–
ogni valore negativo X $ {–2n–1, ..., –2, – 1} viene codificato con la
sequenza di n bit corrispondenti alle n cifre meno significative del
numero X' definito come segue: X' = 2n – |X|
Poiché X $ {-2n–1, ..., –2, –1}, ne consegue che
X' $ {2n–1, ..., 2n – 1}. Quindi il valore del bit più a sinistra della
codifica (cioè la n-esima cifra da destra di X') è sempre 1
dal punto di vista pratico, la doppia rappresentazione dello zero
richiede una maggiore complessità nei circuiti che eseguono
operazioni aritmetiche nei calcolatori (nella ALU)
La complessità dei circuiti della ALU può essere ridotta anche
scegliendo in modo diverso la codifica dei numeri positivi e
negativi. La scelta più efficiente è quella che si effettua
nella codifica in complemento a due
33
Codifica binaria dei numeri interi:
complemento a due
34
Codifica binaria dei numeri reali: virgola fissa
Esempio: n = 3
È analoga alla codifica in segno e valore per i numeri interi.
Con n bit si codificano separatamente
Rappresentazione
in base due
Codifica binaria
-4dieci = -100due
X' = 8-4 = 4dieci = 100due
100
-3dieci = -11due
X' = 8-3 = 5dieci = 101due
101
-2dieci = -10due
X' = 8-2 = 6dieci = 110due
110
-1dieci = -1due
X' = 8-1 = 7dieci = 111due
111
0dieci = 0due = 00due
come in segno e valore:
000
+1dieci = +1due
come in segno e valore:
001
+2dieci = +10due
come in segno e valore:
010
+3dieci = +11due
come in segno e valore:
011
–
il segno (un bit, per convenzione quello più a sinistra)
–
il valore assoluto della parte intera (p bit, per convenzione quelli
successivi al bit di segno)
–
il valore assoluto della parte frazionaria (q bit, per convenzione
quelli più a destra)
I valori di p e q vengono scelti tra quelli che soddisfano
l'uguaglianza 1 + p + q = n
35
36
Codifica binaria dei numeri reali: virgola fissa
!
!
Codifica binaria dei numeri reali: virgola fissa
Parte intera:
con p bit si possono codificare 2p valori. Si scelgono i valori
nell'insieme {0, 1, ..., 2p – 1}. I numeri reali la cui parte
intera sia al di fuori di tale intervallo (in valore assoluto) non
possono essere codificati
Parte frazionaria:
con q bit si codificano le q cifre frazionarie più significative
(quelle con peso maggiore, quindi le prime q dopo la virgola).
Se ci sono altre cifre frazionarie diverse da 0, vengono
trascurate (il numero viene approssimato per troncamento
della parte frazionaria)
Esempi: n = 12, p = 5, q = 6
!
+12,625dieci = +1100,101due
–
bit di segno: 0
parte intera: 1100due = 01100due. Codifica: 01100
–
parte frazionaria: 0,101due = 0,101000due. Codifica: 101000
–
Codifica di +12,625dieci: 0 01100 101000
!
-7,125dieci = -111,001due
–
bit di segno: 1
parte intera: 111due = 00111due. Codifica: 00111
–
parte frazionaria: 0,001due = 0,001000due. Codifica: 001000
–
Codifica di -7,125dieci: 1 00111 001000
37
Codifica binaria dei numeri reali: virgola fissa
Codifica binaria dei numeri reali: virgola fissa
La codifica in virgola fissa di numeri con valore assoluto molto
grande richiede un numero di bit molto elevato. Es.: la massa del
sole in grammi è pari a circa 2#10+33 & 2+111; questo richiederebbe
p ! 112 bit solo per codificare la parte intera
Esempi: n = 12, p = 5, q = 6
!
+23,5078125dieci = +10111,1000001due
–
–
bit di segno: 0
parte intera: 10111due. Codifica: 10111
Analogamente, numeri con valore assoluto molto piccolo sarebbero
approssimati con zero se il numero q di bit per la codifica della
parte frazionaria non fosse sufficiente. Es.: la massa dell'elettrone
in grammi è pari a circa 9#10-28 & 2-90; questo richiederebbe p ! 90
bit per evitare di approssimare con zero tale numero
parte frazionaria: 0,1000001due. Codifica: 100000 (approssimazione
alle prime sei cifre frazionarie)
Codifica di +12,625dieci: 0 10111 100000
–
!
-56,25dieci = -111000,01due
–
–
38
Per poter codificare entrambi i numeri negli esempi di sopra
sarebbero necessari almeno 1+112+90 = 203 bit: le celle di
memoria degli attuali calcolatori ne contengono molti di meno!
bit di segno: 0
parte intera: 111000due. Richiede almeno sei bit, mentre quelli a
disposizione sono cinque: il numero -56,25dieci non può essere
codificato
39
40
Codifica binaria dei numeri reali: virgola mobile
Codifica binaria dei numeri reali: virgola mobile
Per evitare gli inconvenienti della codifica in virgola fissa, nei
calcolatori si usa una codifica basata sulla rappresentazione dei
numeri reali in notazione esponenziale (usata comunemente in
fisica, chimica, ecc.)
Ogni numero reale può essere espresso in notazione
esponenziale in infiniti modi. Es.:
+12,625 = +12,625#100 = +0,12625#10+2 = +1262,5#10-2 =
+0,00012625#10+5 = +126.250,0#10-4 = ...
Ogni numero reale X può essere espresso in notazione esponenziale
come M#BE, dove
– M è un numero reale, detto mantissa
–
B è un numero naturale maggiore di 1, detto base
–
E è un numero intero, detto esponente
Le scelte più “comode” sono quelle che richiedono il minor
numero di cifre pari a 0 prima o dopo la virgola, in quanto
consentono di rappresentare un dato valore con il minor
numero possibile di cifre per la mantissa. Nell'esempio
precedente, +0,12625#10+2 è preferibile a +0,00012625#10+5
Nella pratica si usa comunemente B = 10. Es.: le masse del sole e
dell'elettrone negli esempi precedenti sono espresse in notazione
esponenziale con B = 10
41
Codifica binaria dei numeri reali: virgola mobile
Codifica binaria dei numeri reali: virgola mobile
La codifica in virgola mobile è definita come segue
!
–
sfrutta la rappresentazione in notazione esponenziale di numeri
espressi in base due
–
usa un valore predefinito per B (di norma B=2), che quindi non deve
essere codificato
–
si codificano separatamente
!
!
!
–
42
il segno (un bit)
!
il valore assoluto della mantissa, M (p bit, per convenzione quelli
successivi al bit di segno)
l'esponente, E (q bit, per convenzione quelli più a destra)
per codificare la mantissa con il minor numero possibile di bit, si
sceglie l'unica rappresentazione in cui la parte intera di M sia pari a
1: in questo modo devono essere codificate solo le cifre frazionarie
di M
43
Codfica della mantissa:
con p bit si codificano le q cifre frazionarie più significative di M
(quelle con peso maggiore, quindi le prime q dopo la virgola). Se
ci sono altre cifre frazionarie diverse da 0, vengono trascurate (il
numero viene approssimato per troncamento della parte
frazionaria)
Codifica dell'esponente:
con q bit possono codificare 2q valori. Una possibile scelta è la
codifica in complemento a due con q bit, che consente di
codificare i valori nell'insieme {-2q-1, ..., 2q-1 – 1}. I numeri reali
espressi in base due in notazione esponenziale con B=2 e parte
intera di M pari a 1, il cui esponente sia al di fuori di tale insieme,
non possono essere codificati
44
Codifica binaria dei numeri reali: virgola mobile
Codifica binaria dei numeri reali: virgola mobile
Esempi: n = 12, p = 5, q = 6
! +12,625
= +1100,101due = +1,100101#10+11due
dieci
–
–
–
Esempi: n = 12, p = 5, q = 6
!
–
bit di segno: 0
mantissa: 1,100101due. Codifica: 10010 (si troncano le cifre
frazionarie oltre la quinta)
esponente: +11due. Codifica (compl. a due su 6 bit): 000011
–
–
-7,125dieci = -111,001due = -1,11001#10+10due
–
bit di segno: 1
mantissa: 1,11001due. Codifica: 11001
–
esponente: +10due. Codifica (compl. a due su 6 bit): 000010
–
bit di segno: 0
mantissa: 1,01111000001due. Codifica: 01111 (si troncano le cifre
frazionarie oltre la quinta)
esponente: +100due. Codifica (compl. a due su 6 bit): 000100
Codifica di +23,5078125dieci: 0 01111 000100
Codifica di +12,625dieci: 0 10010 000011
!
+23,5078125dieci = +10111,1000001due = +1,01111000001#10+100due
!
-56,25dieci = -111000,01due = -1,1100001#10+101due
–
–
–
Codifica di -7,125dieci: 1 11001 000010
Codifica di -56,25dieci: 1 11000 000101
45
Codifica binaria dei numeri reali: virgola mobile
bit di segno: 1
mantissa: 1,1100001due. Codifica: 11000 (si troncano le cifre
frazionarie oltre la quinta)
esponente: +101due. Codifica (compl. a due su 6 bit): 000101
46
Codifica di informazioni non numeriche
Esempi: n = 12, p = 5, q = 6
!
!
+8.589.934.592,125dieci = (2
+33
+ 0,125)dieci
!
= +1,00...001#10+100001due (la parte frazionaria della mantissa
contiene 33 '0' prima dell'unico '1')
–
–
–
!
!
caratteri
immagini
suoni
...
bit di segno: 0
mantissa: 1,00...001due. Codifica: 00000 (si troncano le cifre
frazionarie oltre la quinta)
esponente: +100001due (= +33dieci). Tale valore non può però essere
codificato in complemento a due con 6 bit (l'insieme dei valori
codificabili è infatti {-25, ..., 25 – 1} = {-32, ..., +31}), quindi l'intero
numero non può essere codificato in virgola mobile con q = 6 bit per
l'esponente
47
48
Codifica dei caratteri
!
ASCII (American Standard Code for Information Interchange)
–
–
!
!
Codifica delle immagini
Idealmente sono formate da infiniti punti, ciascuno dei quali
può assumere un numero infinito di colori
standard: 7 bit per carattere (27=128 caratteri diversi)
es.: ‘A’ " 1000001
–
campionamento spaziale: “griglia” rettangolare di m#n elementi
(pixel, dal termine picture element), ciascuno dei quali viene
rappresentato con uno stesso colore
–
quantizzazione: si codifica un sottoinsieme finito dei possibili colori
di ogni pixel
8
estesa: 8 bit (2 =256 caratteri diversi)
EBCDIC (Extended Binary-Coded Decimal Interchange Code).
Sviluppata da IBM, 8 bit per carattere
UNICODE: 16 bit per carattere (216=65.535 caratteri diversi)
–
consente di rappresentare caratteri di diversi alfabeti (greco,
cirillico, ecc.)
–
i primi 128 caratteri del codice UNICODE coincidono con i 128
caratteri del codice ASCII
Caratteristiche delle immagini:
–
dimensione: numero di pixel che la compongono (numero di righe e
colonne della “griglia”, m e n)
–
profondità: numero di bit necessari per codificare i colori
49
Codifica delle immagini
!
Codifica delle immagini
Codifica dei colori
Formati di codifica delle immagini
–
bianco e nero: due valori per pixel (0 = nero, 1 = bianco, o viceversa)
–
livelli di grigio (> 2): n bit per pixel (tipicamente 256 livelli di grigio,
codificabli con 8 bit)
–
modelli di colore
!
Red, Blue, Green (RGB): intensità dei tre colori per ogni pixel
(tipicamente 256 livelli per ogni colore, codificabli ciascuno con 8 bit:
quindi 24 bit per pixel)
!
Cyan, Magenta, Yellow, Black (CMYK)
!
Hue, Saturation, Value (HSV)
!
...
50
–
senza perdita di informazione (lossless)
!
–
!
PNG (PortableNetwork Graphic): simile al GIF
!
TIFF (Tagged Image Format File): adatto per la stampa fotografica
!
...
con perdita di informazione (lossy): consentono di ridurre il numero
di bit per la codifica di una stessa immagine, riducendone la qualità
percepita dall'occhio umano
!
!
51
GIF (Graphic Interchange Format): adatto per immagini di piccole
dimensioni e con pochi colori (non per le fotografie)
JPEG (Joint Photographic Expert Group): adatto per immagini
fotografiche o con “toni continui”
...
52
Codifica di dati non numerici: esercizio
Codifica di dati non numerici: esercizio
Una soluzione consiste nel codificare
separatamente lo stato (acceso o spento) di
ogni segmento. Per questo è sufficiente un bit
(per es.: 0 = spento, 1 = acceso).
Lo stato dell'intero display sarà quindi
codificato da una sequenza di sette bit. È
inoltre necessario specificare a quale segmento
corrisponda ogni bit della sequenza: una
possibile scelta è indicata in figura.
In questo modo la configurazione
corrispondente alla cifra '2' sarà codificata
dalla sequenza 1110110
Il display a sette segmenti è un dispositivo (usato
per esempio negli orologi al quarzo) che consente
di visualizzare le dieci cifre decimali e alcuni
caratteri alfabetici per mezzo dell'accensione e
dello spegnimento di ciascuno dei sette segmenti
(in figura è mostrata la configurazione
corrispondente alla cifra '2': i segmenti accesi sono
indicati in nero).
Come possono essere codificate in binario le
configurazioni che possono essere assunte dal
display a sette segmenti?
53
Codifica di dati non numerici: esercizio
Come possono essere codificate in binario le
configurazioni che possono essere assunte dalla
“scacchiera” del gioco del Tris?
Una soluzione è la seguente.
Lo stato di ogni casella può essere codificato
separatamente. Gli stati possiibli sono tre: la casella
può essere vuota, può contenere un 'X', oppure un
'O'.
Per ogni casella sono quindi necessari almeno due bit (per es.: 00 = vuota,
01 = 'X', 10 = 'O'; il valore 11 non è usato). La configurazione di tutte le nove
caselle sarà quindi codificata da una sequenza di diciotto bit. Per es., nella
sequenza le caselle possono essere ordinate da sinistra a destra e dall'alto
in basso. La configurazione in figura sarà allora codificata dalla sequenza
10 01 10 00 00 01 00 00 10.
55
54