Premessa
Elementi di Informatica e
Programmazione
Nella prima lezione è stato presentato il concetto astratto di
calcolatore: non com’è fatto o come funziona, ma che cos’è in sé
La Codifica dell’informazione
Concetto di problema (classe di domande omogenee, alle quali si
possa dare risposta con una procedura uniforme), istanza, soluzione
Concetto di algoritmo (specifica attraverso una sequenza di istruzioni
come produrre una soluzione per ogni istanza)
Il calcolatore come esecutore universale di algoritmi
(parte 1)
Corsi di Laurea in:
Ingegneria Civile
Ingegneria per l’Ambiente e il Territorio
Ora cominciamo a esaminare come “in pratica” i calcolatori attuali
sono costruiti, quali sono le loro componenti e le rispettive funzioni
Cominciamo da un sistema di elaborazione elementare
Università degli Studi di Brescia
Docente: Daniela Fogli
Daniela Fogli – Elementi di Informatica e Programmazione
2
Funzionamento dell’architettura di
Von Neumann
Architettura di Von Neumann
Si basa sui seguenti principi:
Dati e istruzioni del programma da eseguire sono
memorizzati nella memoria centrale
Il processore (CPU) legge e scrive in memoria per
acquisire le istruzioni da eseguire e i relativi dati e per
memorizzare i risultati delle istruzioni eseguite
Le istruzioni vengono acquisite ed eseguite dalla CPU in
modo sequenziale
CPU
ambiente
Dispositivi
di I/O
1. Reperimento dell’istruzione da eseguire
2. Interpretazione dell’istruzione
3. Esecuzione dell’istruzione
Memoria
NOTE: CPU = Central Processing
Unit (Unità centrale) detta oggi
Microprocessore o processore
Le singole operazioni necessarie per l’esecuzione delle
istruzioni sono scandite da un orologio di sistema (clock)
che definisce l’evolvere del tempo all’interno della macchina
Bus di sistema
Daniela Fogli – Elementi di Informatica e Programmazione
3
Daniela Fogli – Elementi di Informatica e Programmazione
4
Bus
Programma e dati in memoria
Indirizzo
In memoria
viene caricata la
forma binaria
del programma
0
1
…
0101011110011001
1101011110011111
0111000000011001
1101011100011101
0110011110011001
0101000111011000
1010011110011001
0101111110000000
0101010010011001
0111000000011001
0101000111011000
0101111110000000
Insieme di collegamenti (linee) che permettono di
trasferire dati da più sorgenti a più destinazioni
(componenti del calcolatore)
zona della
memoria che
contiene le
istruzioni
Il bus può essere suddiviso funzionalmente in:
Bus dati (trasferisce i dati scambiati tra componenti)
Bus indirizzi (trasferisce gli indirizzi della memoria o
delle interfacce di ingresso-uscita coinvolte nel trasferimento)
Bus comandi o “di controllo” (trasferisce segnali di controllo
che regolano le operazioni del sistema di elaborazione)
zona della
memoria che
contiene i dati
zona “libera”
MEMORIA
NB: non distinguibili in sé, è il
“programma” che ne stabilisce
il significato …
Daniela Fogli – Elementi di Informatica e Programmazione
5
… fine della premessa …
Daniela Fogli – Elementi di Informatica e Programmazione
6
Il concetto di informazione e supporto
Informazione: entità che può essere comunicata
Non può esistere informazione senza supporto fisico: mezzo
su cui l’informazione può essere memorizzata e attraverso
cui può essere trasmessa
...
Il CD in cui è memorizzato
Un brano musicale
Programmi, dati, risultati, indirizzi
sono informazioni …
Ora vediamo come si RAPPRESENTANO
nel calcolatore
Daniela Fogli – Elementi di Informatica e Programmazione
L’aria attraverso cui viene
trasmesso
…
7
Daniela Fogli – Elementi di Informatica e Programmazione
8
Proprietà di un supporto
Codice
Il supporto deve poter assumere configurazioni differenti
altrimenti non è in grado di portare informazione
Ad ogni configurazione viene associata una differente entità di
Successione di
simboli
informazione
Il caso più semplice: 2 configurazioni possibili
Esempi: interruttore acceso/spento, tensione sì/no, circuito
Entità di
informazione
E’ necessario un codice:
aperto/chiuso
un insieme di regole che
stabiliscono le associazioni
fra configurazioni e entità di
informazione
Elemento di informazione rappresentato dalla configurazione del
supporto (es. soccorso sanitario: )
Associazione simboli-significati: convenzione semantica
Es. di convenzione semantica alternativa: soccorso sanitario: Daniela Fogli – Elementi di Informatica e Programmazione
Attività di
interpretazione
Daniela Fogli – Elementi di Informatica e Programmazione
9
Esempio di codice
10
Codifica e Decodifica
Codifica = operazione con cui l’informazione viene
Attraverso il codice si attribuisce un significato
convenzionale a ciascuna configurazione che il supporto
può assumere
scritta (su un supporto fisico)
Decodifica = operazione con cui l’informazione viene
letta (da un supporto fisico)
ES., 2 dadi
•
•
•
•
⇒ lettera A
codifica
Il numero “dieci”
Informazione
⇒ lettera B
•
….
10
Daniela Fogli – Elementi di Informatica e Programmazione
11
decodifica
Daniela Fogli – Elementi di Informatica e Programmazione
Supporto
fisico
12
Codifica dei dati e delle istruzioni
Codifica binaria
Poiché il nostro esecutore utilizza componenti a 2
soli stati, è in grado di riconoscere solamente
sequenze di 0 e 1
Alfabeto binario = {0, 1} dove 0 e 1 sono dette cifre
binarie o BIT (Binary digIT)
Importanza tecnologica:
Programma = istruzioni che operano su dati
Istruzioni e dati devono essere rappresentate (codificate)
secondo il linguaggio noto all’esecutore
L’esecutore deve essere infatti in grado di memorizzare e
manipolare istruzioni e dati
Nel caso del calcolatore, istruzioni e dati vengono codificati
come sequenze di 0 e 1
Daniela Fogli – Elementi di Informatica e Programmazione
Dispositivi a due stati (livelli di tensione, magnetizzazione, …)
Semplicità di realizzazione – Affidabilità
“Tutti” i calcolatori elettronici e i dispositivi magnetici di
memorizzazione utilizzano tale corrispondenza
13
Bit, Byte, KiloByte, MegaByte,...
Daniela Fogli – Elementi di Informatica e Programmazione
14
Il problema della rappresentazione
Bit = ‘0’ oppure ‘1’
Byte = 8 bit = 23
Insieme di simboli
disponibili nel
calcolatore = {0, 1}
Insieme di “oggetti”
che vogliamo
rappresentare
KiloByte (KB) = 210 byte = 1.024 byte
MegaByte (MB) = 220 byte = 1.048.576 byte
GigaByte (GB) = 230 byte = 1.073.741.824 byte
TeraByte (TB) = 240 byte = …
PetaByte (PB) =
ExaByte (EB) =
250
260
Problema:
assegnare un codice univoco a tutti
gli oggetti compresi in un insieme
byte = …
byte = …
Ho n oggetti da codificare e 2 soli simboli, quanto è la lunghezza k
delle sequenze di simboli?
Oppure: dispongo di sequenze di lunghezza k di simboli 0 e 1, quanto è
il numero n di oggetti che posso codificare?
Daniela Fogli – Elementi di Informatica e Programmazione
15
Daniela Fogli – Elementi di Informatica e Programmazione
16
Codice binario a n bit
Codifica binaria
• Funzione:
- dominio (insieme di oggetti da rappresentare)
- codominio: insieme di tutte le possibili sequenze di n bit
Se k = 1
• Funzione biunivoca tra il dominio e la sua immagine,
detta insieme delle codifiche
Se k = 2
• Esempio di codice binario a 3 bit:
Se k = 3
Posso codificare n=4 oggetti: 00, 01, 10, 11
Posso codificare n=8 oggetti: 000, 001, 010, 011, 100, 101,
110, 111
110
100
O1
011
O3
Qual è la regola???? (Ipotesi implicita: i codici hanno
tutti la stessa lunghezza)
101
O2
111
Posso codificare due oggetti (n=2): al primo assegno il codice
‘0’ e al secondo assegno il codice ‘1’
insieme delle
codifiche
001
010
dominio
codominio
000
Daniela Fogli – Elementi di Informatica e Programmazione
n = 2k
Daniela Fogli – Elementi di Informatica e Programmazione
17
k = log2n
Esempio: i mesi dell’anno
Se ho a disposizione sequenze di k = 5 bit, quanti
elementi posso codificare?
1 bit 2 gruppi
n = 25 = 32 elementi
Gennaio Febbraio
Marzo Aprile
Maggio Giugno
Luglio Agosto
Settembre Ottobre
Novembre Dicembre
Se n = 128, di quanti bit ho bisogno (k) per codificarli
tutti?
k = log2128 = 7
…e se n = 129???
Allora ho bisogno di 1 bit in più! Ottengo uno spreco di
configurazioni, perché con 8 bit posso codificare fino a
256 elementi
Daniela Fogli – Elementi di Informatica e Programmazione
18
Gennaio
Marzo
Maggio
Luglio
Settembre Ottobre
Novembre Dicembre
Luglio
Settembre
Novembre
0
Agosto 1
Gennaio 000
Febbraio 010
Marzo 001
Maggio
Aprile 011
Giugno
Luglio 100
Agosto 110
Settembre 101
Novembre
Ottobre 111
Dicembre
3 bit 8 gruppi
19
2 bit 4 gruppi
Gennaio Febbraio
Marzo
Aprile
Maggio Giugno
00
10
Gennaio 0000
Febbraio
Aprile
Giugno
Agosto
Ottobre
Dicembre
01
11
Febbraio 0100
0010
Aprile
0110
Maggio
0011
Giugno
0111
Luglio
1000
Agosto
1100
Settembre 1010
Ottobre
1110
Novembre 1011
Dicembre 1111
Marzo
4 bit 16 gruppi… mancano 4
configurazioni!
Daniela Fogli – Elementi di Informatica e Programmazione
20
Esempio: codifica BCD
Cifra
Codifica binaria
decimale
b
rappresentata 3 b2 b1 b0
0
0
0
0
0
0
0
0
1
1
0
0
1
0
2
0
0
1
1
3
0
1
0
0
4
0
1
0
1
5
0
1
1
0
6
0
1
1
1
7
1
0
0
0
8
1
0
0
1
9
1
0
1
0
1
0
1
1
1
1
0
0
1
1
0
1
1
1
1
0
1
1
1
1
Tipologie di codici
Nel seguito vedremo tipologie di rappresentazioni
diverse:
Senza assumere limitazioni sul numero di bit a disposizione:
per numeri [notazione binaria, ovvero posizionale con base 2]
Disponendo di un numero di bit limitato:
numeri naturali
interi relativi [valore assoluto e segno, compl. a 1, compl. a 2]
“reali” [virgola fissa e virgola mobile]
valori logici, caratteri alfabetici, testi
suoni, immagini e sequenze video
codici per la rilevazione e correzione di errori
codifiche
non usate
Daniela Fogli – Elementi di Informatica e Programmazione
Codici di compressione (senza | con perdita)
21
Tipologie di codici
22
Sistema di numerazione posizionale
Ad ogni cifra del numero è attribuito un peso a seconda
della sua posizione all’interno del numero
Nel seguito vedremo tipologie di rappresentazioni
diverse:
Senza assumere limitazioni sul numero di bit a disposizione:
per numeri [notazione binaria, ovvero posizionale con base 2]
Disponendo di un numero di bit limitato:
Sistema di numerazione posizionale in base b:
Numero Nb = ckck-1ck-2…c0.c-1c-2…cc-h
Dove ck è la cifra più significativa mentre c0 è la cifra meno
significativa (prima della virgola) (c-1 è quella più significativa
della parte frazionaria, c-h quella meno significativa)
Nb è il numero ottenuto facendo:
ckxbk+ck-1xbk-1+ck-2xbk-2…+c0xb0 +c-1xb-1+…+c-hxb-h
numeri naturali
interi relativi [valore assoluto e segno, compl. a 1, compl. a 2]
“reali” [virgola fissa e virgola mobile]
valori logici, caratteri alfabetici, testi
suoni, immagini e sequenze video
codici per la rilevazione e correzione di errori
Esempio: b=10, il numero 3256.234
dove c3 = 3, c2 = 2, c1 = 5, c0 = 6, c-1=2, c-2=3, c-3 =4 rappresenta
3x103 + 2x102 + 5x101 + 6x100 + 2x10-1 + 3x10-2 + 4x10-3 =
= 3000 + 200 + 50 + 6 + 0.2 + 0.03 + 0.004
Codici di compressione (senza | con perdita)
Daniela Fogli – Elementi di Informatica e Programmazione
Daniela Fogli – Elementi di Informatica e Programmazione
23
Daniela Fogli – Elementi di Informatica e Programmazione
24
Le basi più comuni
Notazione Binaria
Base = 2
Se la base è b, allora le cifre che possono essere
utilizzate per comporre un numero vanno
Cifre: 0, 1
Numeri espressi nella forma
(an an-1 … a1 a0 . a-1 a-2 …)due
da 0 a b-1
[ai ∈ {0,1}]
il cui “valore” è
(an*2n + an-1*2n-1 + … + a0*20 + a-1 * 2-1 + a-2 *2-2 …)
Esempio: b = 10, cifre possibili: [0,1,2,3,4,5,6,7,8,9]
Esempio: b = 2, cifre possibili: [0,1]
Esempio: b = 8, cifre possibili: [0,1,2,3,4,5,6,7]
Esempio: b = 16, cifre possibili: [0,1,2,3,4,5,6,7,8,9,A,
B,C,D,E,F]
ESEMPIO
N = 101011.1011due
N = 1 — 25 + 0 — 24 + 1 — 23 + 0 — 22 + 1 — 21 + 1 — 20
+ 1 — 2-1 + 0 — 2-2 + 1 — 2-3 + 1 — 2-4 =
= 43.6875dieci
Daniela Fogli – Elementi di Informatica e Programmazione
25
Conversione binario ⇒ decimale
26
Domande
Come visto, la conversione si ottiene direttamente dalla
definizione stessa di numero binario
Scriviamo i numeri denotando la base attraverso il pedice:
es. 1101.1due
E’ facile convertirlo in un numero decimale facendo:
Il numero binario 101001011due è pari o dispari?
A quale numero decimale corrisponde?
101001011due = (1x28 + 0x27 + 1x26 + 0x25 + 0x24 + 1x23 + 0x22 +
1x21 + 1x20)dieci = (256 + 64 + 8 + 2 + 1)dieci = 331dieci
1101.1due = 1x23 + 1x22 + 0x21 + 1x20 + 1x2-1 = 8dieci + 4dieci + 0dieci +
+ 1dieci + 0.5dieci = 13.5dieci
Altri esempi:
10101.01due = 1x24 + 0x23 + 1x22 + 0x21 + 1x20 + 0x2-1 + 1x2-2 = 16 +
+ 4 + 1 + 0.25 = 21.25dieci
110010.001due= 1x25 + 1x24 + 0x23 + 0x22 + 1x21 + 0x20 + …+ 1x2-3 =
= 32 + 16 + 2 + 0.125 = 50.125dieci
1000001due = 1x26 + 0x25 + 0x24 + 0x23 + 0x22 + 0x21 + 1x20 = 64 + 1
= 65dieci
Daniela Fogli – Elementi di Informatica e Programmazione
Daniela Fogli – Elementi di Informatica e Programmazione
27
Daniela Fogli – Elementi di Informatica e Programmazione
28
Conversione decimale ⇒ binario
Conversione decimale ⇒ binario
metodo pratico
Regola pratica per convertire la parte intera
Usare lo stesso metodo visto prima è complesso!
Si noti che:
10dieci 2dieci
Esempio: 3dieci
345dieci = 11x101010 + 100x101001 + 101x10100 = …
ckck-1ck-2…c0 si può scrivere anche come ckck-1ck-2c1xb+c0
Ad esempio:
3256 = 325x10 + 6
325 = 32x10 + 5
32 = 3x10 + 2
3=0x10 + 3
… e poi bisogna fare le moltiplicazioni e l’elevamento a
potenza in base 2 e sommarne i risultati in base 2
Useremo un “metodo pratico”
In pratica, per “isolare” le cifre del numero, basta fare una serie
di divisioni per la base e tenere il resto
Dato un numero decimale N, innanzitutto distinguiamo parte intera
e la parte frazionaria: N = I.F (ES: dato 56.5dieci, convertiamo
separatamente 56 e 0.5)
Daniela Fogli – Elementi di Informatica e Programmazione
(in base b = dieci)
Alla fine, quando il numero è diventato 0, si leggono i resti
dall’ultimo al primo e si ottiene di nuovo il numero
Daniela Fogli – Elementi di Informatica e Programmazione
29
Conversione decimale ⇒ binario
30
Esempio di conversione da decimale
a binario
metodo pratico
Allo stesso modo, per convertire un numero decimale in un
numero binario basta fare una sequenza di divisioni (operazione
div) per la base 2 e prendere il resto (operazione mod)
137dieci = ?due
137 div 2 = 68 & 137 mod 2 = 1
Esempio:
56 div 2 = 28 & 56 mod 2 = 0 (cifra meno significativa del numero bin)
28 div 2 = 14 & 28 mod 2 = 0
14 div 2 = 7 & 14 mod 2 = 0
7 div 2 = 3 & 7 mod 2 = 1
3 div 2 = 1 & 3 mod 2 = 1
1 div 2 = 0 & 1 mod 2 = 1 (cifra più significativa del numero bin)
Si ottiene 111000due = 32dieci + 16dieci + 8dieci + 0 + 0 + 0 = 56dieci
68 div 2 = 34 &
68 mod 2 = 0
34 div 2 = 17 &
34 mod 2 = 0
17 div 2 = 8
&
17 mod 2 = 1
8 div 2 = 4
&
8 mod 2 = 0
4 div 2 = 2
&
4 mod 2 = 0
2 div 2 = 1
&
2 mod 2 = 0
1 div 2 = 0
&
1 mod 2 = 1
Si legge dal
basso verso
l’alto !!!
Risultato = 10001001due
Esercizio: riconvertire il risultato in decimale
Daniela Fogli – Elementi di Informatica e Programmazione
31
Daniela Fogli – Elementi di Informatica e Programmazione
32
Errore Tipico (1)
81
40
20
10
5
2
1
0
1
0
0
0
1
0
1
Errore Tipico (2)
88
44
22
11
5
2
1
E’ un errore considerare la prima cifra
ottenuta come la più significativa
otterrei 1000101 che vale 69!
Daniela Fogli – Elementi di Informatica e Programmazione
NB: se si è colti dal dubbio, ricordare che la prima cifra
significativa in questo caso vale sempre 1
33
34
Basta fare una sequenza di moltiplicazioni per 2 e prendere la
parte intera di ciascun prodotto dalla cifra più significativa a quella
meno significativa
Esempio: 0.587dieci binario?
F = a-1*b-1 + a-2*b-2 + ....... + a-n*b-n (dove b è la base)
F * b = a-1 + a-2*b-1 + ....... + a-n*b-(n-1)
la parte intera è a-1
(F*b - a-1) * b = a-2 + ....... + a-n*b-(n-2)
la parte intera è a-2
...
.
0.587 x 2 = 1.174: p.f. 0.174, parte intera 1 (cifra più significativa)
0.174 x 2 = 0.348: p.f. 0.348, parte intera 0
0.348 x 2 = 0.696: p.f. 0.696, parte intera 0
0.696 x 2 = 1.392: p.f. 0.392, parte intera 1
0.392 x 2 = 0.784: p.f. 0.784, parte intera 0
0.784 x 2 = 1.568: p.f. 0.568, parte intera 1
….
Es. con b = 10, sia F=.53
Le 3 cifre che
costituiscono il
numero
Si ottiene 0.10010due con 5 cifre binarie dopo la virgola, oppure
0.100101due con 6 cifre binarie dopo la virgola, oppure…
In ogni caso c’è un’approssimazione
Ma a noi interessa che la base di arrivo sia la base 2 …
Daniela Fogli – Elementi di Informatica e Programmazione
Daniela Fogli – Elementi di Informatica e Programmazione
Conversione da decimale a binario
della parte frazionaria
Regola pratica per convertire la parte
frazionaria
la parte intera è 5
la parte intera è 3
la parte intera è 1
E’ un errore fermarsi quando si ottiene
1 come dividendo
otterrei 011000 (24) anziché 1011000 (64+24)
NB: se si è colti dal dubbio, ragionare: se continuassi il
procedimento di divisioni successive aggiungerei zeri; questi
“non pesano” solo se corrispondono alle posizioni più
significative ( 0…0xyz ) !
.531 x 10 = 5 + .31
.31 x 10 = 3 + .1
.1 x 10 = 1
0
0
0
1
1
0
35
Daniela Fogli – Elementi di Informatica e Programmazione
36
Esempio:
convertire 43.687dieci in binario
43
1
.687 x 2 p.i. 1
21
1
.374 x 2 p.i. 0
10
0
.748 x 2 p.i. 1
5
1
.496 x 2 p.i. 0
2
0
.992 x 2 p.i. 1
1
1
.984 …
Operazioni aritmetiche
Operazioni +, -, *, / su numeri in base 2
Valgono le stesse regole e proprietà delle
operazioni in base 10
0
43.687dieci = 101011.10101due
(fermandosi al quinto bit per la parte
frazionaria)
Daniela Fogli – Elementi di Informatica e Programmazione
Daniela Fogli – Elementi di Informatica e Programmazione
37
Aritmetica binaria: addizione
+
0
1
0
0
1
38
Aritmetica binaria: sottrazione
0
1
1
1
(1) 0
0
0
1
1
(1) 1
0
Riporto: 1 + 1 = 2dieci = 10due
Prestito (borrow): 102 – 12 (= 210 – 110) = 012
Esempio:
Esempio:
110+
10=
_________
6
1110 –
14
2
11 =
3
_________
1000
1011
Daniela Fogli – Elementi di Informatica e Programmazione
39
Daniela Fogli – Elementi di Informatica e Programmazione
11
40
Altri esempi di operazioni
aritmetiche in base 2
Aritmetica binaria: moltiplicazione
*
0
1
0
0
0
1
0
1
moltiplicazione
addizione
1011+
Esempio:
111010*
1011=
58
11
0111=
______
__________
111010
111010
000000
111010
10010
11000011=
__________
1001
_______________________________________
1001111110
sottrazione
638
1101×
1011=
_______
1101+
1101 +
0000
+
1101
+
_____________
10001111
Esercizio: controllare se i risultati sono corretti convertendo in decimale
Daniela Fogli – Elementi di Informatica e Programmazione
41
Numeri in base 8 (ottali)
Daniela Fogli – Elementi di Informatica e Programmazione
42
Numeri in base 16 (esadecimali)
Le cifre: [0, 1, 2, 3, 4, 5, 6, 7]
Le cifre: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F]
17otto = ?dieci
1otto = 1dieci
17otto = (1 x
7otto = 7dieci
81
+7x
80)
dieci
7D2sedici = ?dieci
7sedici = 7dieci Dsedici = 13dieci 2sedici = 2dieci
7D2sedici = (7 x 162 + 13 x 161 + 2 x 160)dieci = (7 x 256 + 208 +
2)dieci = (1792 + 208 + 2)dieci = 2002dieci
= (8 + 7)dieci = 15dieci
372otto = ?dieci
372otto = (3 x 82 + 7 x 81 + 2 x 80)dieci = (3 x 64 + 56 + 2)dieci =
250dieci
Daniela Fogli – Elementi di Informatica e Programmazione
FAsedici = ?dieci
Fsedici = 15dieci Asedici = 10dieci
FAsedici = (15 x 161 + 10 x 160)dieci = (240 + 10)dieci = 250dieci
43
Daniela Fogli – Elementi di Informatica e Programmazione
44
Perché le basi 2, 8 e 16?
I primi 16 numeri in base 10, 2, 8, e 16
decimale
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Sistema di numerazione
binario
ottale
0000
0
0001
1
0010
2
0011
3
0100
4
0101
5
0110
6
0111
7
1000
10
1001
11
1010
12
1011
13
1100
14
1101
15
1110
16
1111
17
La rappresentazione binaria ha motivazioni di tipo
esadecimale
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
Daniela Fogli – Elementi di Informatica e Programmazione
tecnologico
Le rappresentazioni ottali ed esadecimali sono utili per
rappresentare sinteticamente i valori binari
E’ facile convertire un numero in base 2 in un numero
in base 8 o 16
Le cifre binarie si possono raggruppare a 3 a 3 e poi
codificare con numeri ottali
Le cifre binarie si possono raggruppare a 4 a 4 e poi
codificare con numeri esadecimali
Conversione binario ⇒ ottale
Tabella di conversione
0otto
000due
001due
1otto
010 due
2otto
011due
3otto
100due
4otto
101due
5otto
110due
6otto
111due
7otto
Daniela Fogli – Elementi di Informatica e Programmazione
45
46
Conversione binario ⇒ esadecimale
Tabella di conversione
11 110 110 100.001due = 3 6 6 4 .1otto
Separazione a gruppi di tre cifre binarie
a partire dalla meno significativa per la
parte intera, e dalla più significativa per
la parte frazionaria (dalla virgola!)
Nel gruppo “più significativo” della
parte intera si possono aggiungere degli
zeri a sinistra, nel “meno significativo”
della frazionaria zeri a destra
Daniela Fogli – Elementi di Informatica e Programmazione
47
0000due
0001due
0010due
0011due
0100due
0101due
0110due
0111due
1000due
1001due
1010due
1011due
1100due
1101due
1110due
1111due
0sedici
1sedici
2sedici
3sedici
4sedici
5sedici
6sedici
7sedici
8sedici
9sedici
Asedici
Bsedici
Csedici
Dsedici
Esedici
Fsedici
111 1011 0100due = 7 B 4sedici
Si procede nello stesso modo,
ma separando le cifre a gruppi
di 4 anziché di 3
Daniela Fogli – Elementi di Informatica e Programmazione
48
Errore Tipico
Esecuzione corretta
Convertire in notazione ottale il numero binario 10111010.11
L’esercizio quindi va risolto così:
10111010.11
5 6 2. 3
10111010.110
Invece 562.38 = 5*64 + 6*8 + 2 + 3/8 = 370.375 che sicuramente non può
essere rappresentato con una parte intera di soli 8 bit!!!
PARTIRE SEMPRE DAL PUNTO DI RADICE, EVENTUALMENTE
COMPLETANDO LE CIFRE CON DEGLI ZERI PER OTTENERE LE
TERNE:
2 7 2 . 68
infatti risulta 272.68 = 2*64 + 7*8 + 2 + 6/8 = 186.7510
e 10111010.112 = 128 + 32 + 16 + 8 + 2 + 0.5 + 0.25 = 186.7510
xxx xxx . yyy yyy …
Daniela Fogli – Elementi di Informatica e Programmazione
Daniela Fogli – Elementi di Informatica e Programmazione
49
50
Esempi di conversione
esadecimale-binario
Un altro esempio
Convertire in binario il numero in notazione ottale 135.18
1)
1 3 5.18
0111010 .1
3 A . 816
0 0 1 0 1 1 1 0 1 . 001
2)
E 3 . 716
11100011.0111
ERRORE TIPICO: CONVERTIRE IN
001 011 101 . 1
ATTENZIONE!!!
PARTIRE SEMPRE DAL PUNTO DI RADICE!!!
xxxx . xxxx xxxx
infatti 0.18 = 1/8 = 0.125 mentre 0.12 = 1/2 = 0.5
Daniela Fogli – Elementi di Informatica e Programmazione
51
Daniela Fogli – Elementi di Informatica e Programmazione
52
Esercizio (in aula)
Esercizio (in aula)
Dato il numero binario 001010110111due convertirlo in
un numero ottale e poi in un numero esadecimale
Se la base considerata è b = 4, quali sono le cifre
utilizzate per comporre i numeri?
[0,1,2,3]
Convertire il numero (1320)quattro nel corrispondente
numero in base 10
1320quattro = (1x43 + 3x42 + 2x41 + 0x40)dieci = (64 + 48 +
8)dieci = 120dieci
Qual è il numero massimo rappresentabile in base 3
con quattro cifre (espresso in base 3)?
2222tre
Convertire il numero ottale in numero decimale
Numero ottale: 001 010 110 111 1267otto
Numero esadecimale: 0010 1011 0111 2B716
Numero decimale: 1267otto = (1x83 + 2x82 + 6x81 +
7x80)dieci = (512 + 128 + 48 + 7)dieci = 695dieci
Daniela Fogli – Elementi di Informatica e Programmazione
53
Esercizi
1. Convertire in formato decimale i seguenti numeri binari:
11, 101011, 1100, 111111, 10101010
2. Convertire in decimale i seguenti numeri frazionari binari :
0.111, 0.0101, 0.00011
3. Convertire in formato decimale i seguenti numeri ottali:
12, 23, 345, 333.14, 560.271
4. Convertire in formato decimale i seguenti numeri esadecimali:
12.5, DAB, 15D, FFFF, 51A
5. Convertire in binario i seguenti numeri decimali (considerando 6 bit
per la parte frazionaria):
45.226, 234.349, 67.712, 83.8123
6. Convertire in ottale e in esadecimale i numeri binari ottenuti dalla
conversione dei numeri decimali di cui al punto precedente
Daniela Fogli – Elementi di Informatica e Programmazione
55
Daniela Fogli – Elementi di Informatica e Programmazione
54
Tipologie di codici
Elementi di Informatica e
Programmazione
Nel seguito vedremo tipologie di rappresentazioni
diverse:
La Codifica dell’informazione
(parte 2)
Senza assumere limitazioni sul numero di bit a disposizione:
per numeri [notazione binaria, ovvero posizionale con base 2]
Disponendo di un numero di bit limitato:
Corsi di Laurea in:
numeri naturali
interi relativi [valore assoluto e segno, compl. a 1, compl. a 2]
“reali” [virgola fissa e virgola mobile]
valori logici, caratteri alfabetici, testi
suoni, immagini e sequenze video
codici per la rilevazione e correzione di errori
Ingegneria Civile
Ingegneria per l’Ambiente e il Territorio
Università degli Studi di Brescia
Codici di compressione (senza | con perdita)
Docente: Daniela Fogli
Daniela Fogli – Elementi di Informatica e Programmazione
Codifica dei numeri naturali
2
Nota
I numeri naturali si rappresentano normalmente, ma con n cifre
binarie possiamo rappresentare solo i numeri da 0 a Nmax
Con n cifre binarie si possono rappresentare i numeri da 0 a 2n-1
Esempio: con 8 cifre (n=8)
0
0
0
0
0
0
0
0
0
Esempio precedente
0
0
0
0
0
0
0
1
1
n=8
…
0
1
1
1
1
1
1
1
1
127
1
1
1
1
1
1
1
Nmax = 255
1
1
1
1
1
1
1
Nmax = 2n-1 = 256-1 =255
…
1
Daniela Fogli – Elementi di Informatica e Programmazione
3
Daniela Fogli – Elementi di Informatica e Programmazione
4
Viceversa
In generale …
Per poter rappresentare numeri naturali fino a N ≥ 0,
serve un numero di cifre n tali che:
Voglio rappresentare i numeri naturali da 0 a Nmax.
Di quante cifre binarie ho bisogno?
Nmax ≥ N ovvero (2n – 1) ≥ N
Esempio
Quindi deve essere
n ≥ log2(N + 1)
Voglio rappresentare numeri da 0 a 350
…
con n = 7 Nmax = 127
Esempio precedente
con n = 8 Nmax = 255
N = 350
con n = 9 Nmax = 511
n ≥ log2(351) = 8,….
quindi n ≥ 9
n=9
Daniela Fogli – Elementi di Informatica e Programmazione
5
Operazioni aritmetiche
14
0010=
2
Nel seguito vedremo tipologie di rappresentazioni
diverse:
Senza assumere limitazioni sul numero di bit a disposizione:
per numeri [notazione binaria, ovvero posizionale con base 2]
Disponendo di un numero di bit limitato:
_________
(1) 0 0 0 0
numeri naturali
interi relativi [valore assoluto e segno, compl. a 1, compl. a 2]
“reali” [virgola fissa e virgola mobile]
valori logici, caratteri alfabetici, testi
suoni, immagini e sequenze video
codici per la rilevazione e correzione di errori
0?
Nel caso di sottrazione, un prestito dal bit più significativo indica
un risultato negativo (non rappresentabile)
1100–
12
1101=
13
__________
(1) 1 1 1 1
6
Tipologie di codici
Nel caso di addizione, ho traboccamento (overflow) quando ho un riporto
dal bit più significativo che non può essere rappresentato con le cifre a
disposizione
1110+
Daniela Fogli – Elementi di Informatica e Programmazione
Codici di compressione (senza | con perdita)
15?
Daniela Fogli – Elementi di Informatica e Programmazione
7
Daniela Fogli – Elementi di Informatica e Programmazione
8
Codifica in valore assoluto e segno
con 4 bit
Codifica in valore assoluto e segno
Il modo più semplice: indicare il segno seguito dal valore assoluto
0000
0001
0010
0011
0100
0101
0110
0111
Esempio: n = 8 (8 bit a disposizione)
Rappresentazione di -11
1
0
0
0
1
segno -
0
1
1
11
Daniela Fogli – Elementi di Informatica e Programmazione
Numeri negativi
Numeri positivi
Se i bit disponibili per la codifica sono n si utilizza il primo bit della
sequenza per indicare il segno (0 per positivo e 1 per negativo), e
i restanti bit rappresentano il valore assoluto del numero
-0
-1
-2
-3
-4
-5
-6
-7
Daniela Fogli – Elementi di Informatica e Programmazione
9
Due note importanti
1000
1001
1010
1011
1100
1101
1110
1111
+0
+1
+2
+3
+4
+5
+6
+7
10
Che problemi ha questa codifica?
Questa tecnica non viene usata nel calcolatore
Esistono due codifiche per il valore 0
Difficoltà nel fare le operazioni aritmetiche (es. la sottrazione)
0
0
0
0
0
0
0
0
0+
1
0
0
0
0
0
0
0
0-
Es. 1 (sottrazione di numeri entrambi positivi)
- (2n-1 - 1)
segno *
*
*
*
a
*
n-1 bit: da 0 a 2
*
n-1
0
0
0
1
1
0
1
1
b:
0
0
1
0
1
0
1
1
-
27
43
Dato che |b|>|a|, il segno del risultato è negativo, il valore assoluto è
I valori rappresentabili vanno:
da
a:
+ (2n-1 - 1)
0101011 0011011=
0010000
*
a-b:
-1
Daniela Fogli – Elementi di Informatica e Programmazione
11
1
0
0
1
|b|
|a|
0
0
0
0
Daniela Fogli – Elementi di Informatica e Programmazione
-16
12
Un altro esempio
In generale
Segno a
+
+
+
-
Es. 2: Sottrazione di numeri entrambi positivi ma con |a|>|b|
a:
0
0
1
1
1
0
1
1
b:
0
0
1
0
1
0
1
1
-
59
43
Dato che |a|>|b|, il segno del risultato è positivo, il valore assoluto
è
0111011- |a|
0101011= |b|
0010000
a-b:
0
0
0
1
0
0
0
0
|a| >|b|
|b|>|a|
|a| > |b|
|b| > |a|
segno(a-b)
+
+
+
|a-b|
a-b
b-a
|a| + b
a + |b|
|a| - |b|
|b| - |a|
Per il calcolatore le operazioni di somma e sottrazione sono complesse
Si vuole una rappresentazione per la quale esista
un unico semplice metodo per l’addizione e la sottrazione …
+16
Daniela Fogli – Elementi di Informatica e Programmazione
13
Codifica in complemento a 1
Daniela Fogli – Elementi di Informatica e Programmazione
14
Esempi
Si ottiene facendo il complemento di tutti i bit (ovvero
si sostituiscono gli 0 con 1 e gli 1 con 0)
Ad esempio:
n=8
+21dieci = 00010101due
–21dieci = 11101010due
Anche questa volta il numero 0dieci ha due
rappresentazioni: 00000000 e 11111111
Esercizio:
n=8
+36dieci = 00100100due
- 36dieci = ????????due
Es.: 5dieci = 0101due e –5dieci = 1010due
Il bit più significativo indica se positivo o negativo
I numeri positivi si rappresentano come nella
rappresentazione in valore assoluto e segno
I numeri negativi si rappresentano come
complemento a 1 del numero positivo corrispondente
Daniela Fogli – Elementi di Informatica e Programmazione
Segno b
+
+
+
-
15
Daniela Fogli – Elementi di Informatica e Programmazione
16
Operazioni aritmetiche
Codifica in complemento a 2
Sia n è il numero di bit utilizzati per la codifica
I numeri positivi sono rappresentati normalmente
(rappresentazione binaria dei numeri positivi) con il bit più
significativo pari a 0
I numeri negativi si ottengono come complemento a due del
numero positivo x corrispondente, ovvero come 2n – x, e il bit più
significativo è pari a 1
La somma si ottiene facendo la somma degli addendi e poi
sommando l’eventuale riporto
Esempi:
10011100 +
-99dieci
10011100 +
-99dieci
11100011 =
-28dieci
11001001 =
-54dieci
(1)01111111 +
(1)01100101 +
1=
1=
10000000
-127dieci
Risultato OK
01100110
Esempi (con n = 4):
+6dieci = 0110 (rappresentato normalmente)
- 6dieci ⇒ 24 - 6 = 10 ⇒ -6dieci = 1010c2
+3dieci ⇒ 0011 (rappresentato normalmente)
- 3dieci ⇒ 24 - 3 = 13 ⇒ -3dieci = 1101c2
+102dieci
Risultato ERRATO! (overflow)
E’ complicato?
Somma più semplice ma con il problema di sommare il riporto …
Daniela Fogli – Elementi di Informatica e Programmazione
Daniela Fogli – Elementi di Informatica e Programmazione
17
Due metodi pratici
Codifica in complemento a 2 con n=4 bit
Bit di
segno
Numeri positivi
0000
0001
0010
0011
0100
0101
0110
0111
0
1
2
3
4
5
6
7
Bit di
segno
18
Numeri negativi
1000
1001
1010
1011
1100
1101
1110
1111
Esistono due metodi pratici equivalenti per calcolare il
complemento a due di un numero x
-8
-7
-6
-5
-4
-3
-2
-1
Metodo 1:
1. Effettuare il complemento a 1 di x
2. Aggiungere 1
Metodo 2:
1. Partendo da destra e andando verso sinistra, lasciare
invariati tutti i bit fino al primo 1 compreso
2. Complementare (invertire) tutti i bit successivi al primo 1
Unica rappresentazione del numero zero
NB: il Metodo 1 è quello utilizzato nei dispositivi elettronici
NB: i numeri rappresentabili vanno da -2n-1 (-8) a +(2n-1 -1) (+7)
Daniela Fogli – Elementi di Informatica e Programmazione
19
Daniela Fogli – Elementi di Informatica e Programmazione
20
Esempio di uso del metodo 1
Esempio di uso dell’algoritmo 2
Dato +6dieci codificato su 4 bit ⇒ 0110
Dato +6dieci codificato su 4 bit ⇒ 0110
Facendo il complemento a 1 si ottiene 1001
1010
Sommando 1 al risultato si ottiene…
rimane invariato
rimane invariato
1001+
viene invertito
1=
Risultato
1010
viene invertito
1010
Daniela Fogli – Elementi di Informatica e Programmazione
Daniela Fogli – Elementi di Informatica e Programmazione
21
Altro esempio
22
Errore Tipico
ERRORE TIPICO: dimenticarsi che la rappresentazione in C.a 2 è relativa ad
un numero di bit fissati!!!
A partire dalla codifica binaria di 15dieci troviamo la
codifica binaria di –15dieci
15dieci = 01111 … nota 5 bit!
Usando il primo metodo:
01111 ⇒ complemento ⇒ 10000
Aggiungo 1 a 10000 ⇒ 10001
Es. Rappresentare in C. a 2 con 8 bit il numero decimale –3.
3dieci = 11due
Usando il secondo metodo:
quindi –3dieci = 01due
ma questo risulta un numero positivo!!!
Svolgimento corretto:
01111 ⇒ lascio invariato il primo 1 a destra e
complemento tutti gli altri ⇒ 10001
3dieci = 00000011due
-3dieci = 11111101
Daniela Fogli – Elementi di Informatica e Programmazione
23
Daniela Fogli – Elementi di Informatica e Programmazione
24
Una visione globale …
Intervalli di rappresentazione: esempio
Con n cifre si possono rappresentare 2n numeri.
Metà per i positivi e metà per i negativi, come in figura
Supponiamo di avere una codifica con n=16 bit
Rapp."normale“
Rappresentazione in valore assoluto e segno: numeri compresi
Numeri
positivi
fra –(215-1) e 215-1, ovvero fra –32767 e +32767… lo 0 ha due
rappresentazioni
00000010 +2
00000001 +1
00000000 0
+2n-1 -1 01111111
–2n-1 10000000
–(2n-1-1) 10000001
Rappresentazione in complemento a 1: numeri compresi fra –(2151) e 215-1, ovvero fra –32767 e +32767… lo 0 ha due
rappresentazioni
11111111 –1
11111110 –2
11111101 –3
Rappresentazione in complemento a 2: numeri compresi fra –215
e 215-1, ovvero fra –32768 e +32767… lo 0 ha una sola
rappresentazione (in pratica, però, tipicamente si utilizzano i valori fra
–32767 e +32767 per simmetria, così dato un qualsiasi numero
anche il suo opposto è rappresentabile)
Numeri
negativi
C. A 2: 2n - N
NB: i numeri rappresentabili vanno da -2n-1 a +(2n-1 -1)
Daniela Fogli – Elementi di Informatica e Programmazione
25
Conversione da numero binario in
complemento a 2 a numero decimale
Daniela Fogli – Elementi di Informatica e Programmazione
Altri esempi
Si può usare la simmetria dell’operazione in compl. a 2
10001 = -1x24 + 1x20 = -16 + 1 = -15dieci
Esempio:
1010 = -1x23 + 1x21 = -8 + 2 = -6dieci
1000001due è un numero negativo, pari a – 0111111 = -63dieci
10101010 = -1x27 + 1x25 + 1x23 + 1x21= -128 + 32 + 8
+ 2 = -86
Oppure si può usare la seguente regola:
il valore di un numero ckck-1…c1c0 rappresentato in complemento a
due è dato dalla seguente espressione
-ckx2k
+
ck-1x2k-1 +
…+
c1x21
+
26
Esercizio proposto:
ricavare il valore decimale col metodo della simmetria
c0x20
Esempio:
1 0 0 0 0 0 1due = (-1)x26 + 1x20 = - 64 +1 = - 63dieci
Daniela Fogli – Elementi di Informatica e Programmazione
27
Daniela Fogli – Elementi di Informatica e Programmazione
28
Perché il complemento a 2?
Estensione del segno
I calcolatori usano la rappresentazione in
complemento a 2
Estendiamo il segno per rappresentare
un numero su n=k + d bit anziché su
n=k bit
si semplificano i circuiti che svolgono le operazioni
aritmetiche
in particolare la somma si effettua semplicemente
come nel caso di numeri naturali, inoltre
somma e sottrazione possono essere realizzate
con un unico circuito: infatti: x - y = x + (-y)
Daniela Fogli – Elementi di Informatica e Programmazione
29
1 0 0 0
-8 su n = 4 bit
1 1 1 1 1 0 0 0
-8 su n = 8 bit
Daniela Fogli – Elementi di Informatica e Programmazione
Somma di numeri in complemento a 2
Esempio di addizione
L’addizione di due numeri rappresentati in
complemento a 2 dà un risultato corretto, trascurando
il riporto, a patto che il risultato sia compreso
Usando n = 6 bit, l’intervallo dei numeri rappresentabili
va da –25 a +25-1, ovvero da –32 a +31
30
Vogliamo calcolare 26 - 13
entro l’intervallo dei numeri rappresentabili
26 – 13 = 26 + (-13) = +13
n = 8 bit, posso rappresentare i numeri da –27 a +27 - 1
(+5)
00000101
(+5)
00000101
(+8)
00001000
(-8)
11111000
(+13) 00001101
(-3)
11111101
Daniela Fogli – Elementi di Informatica e Programmazione
011010+
26
110011=
-13
1001101
Il riporto viene trascurato
31
(13 = 0 0 1 1 0 1)
+13
È nell’intervallo dei
numeri rappresentabili
Daniela Fogli – Elementi di Informatica e Programmazione
32
Overflow
Esempio di overflow
Bit di segno
La somma di due numeri interi positivi o di due numeri
interi negativi può dar luogo ad un intero non rappresentabile
con i bit a disposizione
Questo dà luogo a ciò che si chiama “overflow”
(traboccamento)
In caso di overflow, il risultato di un’operazione non è valido
Esempio: supponiamo di avere a disposizione 8 bit per
rappresentare gli interi (1 bit per il segno e 7 bit per il valore)
Sommiamo a 01111111 (+127) il numero 00000001 (+1)
otteniamo un numero negativo (-128) invece di +128
Daniela Fogli – Elementi di Informatica e Programmazione
01111111 +
+127
00000001 =
+1
10000000
-128
Il risultato ha segno negativo nonostante
gli addendi siano entrambi positivi
33
Regola per la determinazione
dell’overflow
Daniela Fogli – Elementi di Informatica e Programmazione
34
Regola equivalente per l’overflow
Se gli addendi hanno segno discorde non si ha mai overflow:
Con una rappresentazione su n bit, si ha overflow se i
riporti generati nelle due posizioni più significative
(n-1 e n-2 in figura) sono diversi
MAX (+)
N1
Somma compresa tra N1 (positivo)
0
N2
ed N2 (negativo), quindi sicuramente
rappresentabile!
MIN (-)
Se gli addendi hanno segno concorde si ha overflow se il segno del
risultato è diverso dal segno dei due addendi:
+ e +:
deve risultare +, altrimenti overflow!
–e–:
deve risultare –, altrimenti overflow!
Daniela Fogli – Elementi di Informatica e Programmazione
n-1 n-2
1
0
(ovvero: se c’è riporto generato in una posizione ma non nell’altra)
35
Daniela Fogli – Elementi di Informatica e Programmazione
36
Esempio di overflow
Esempio di “non” overflow
Usando n = 6 bit, l’intervallo dei numeri rappresentabili va da –25 a
+25-1, ovvero da –32 a +31
25 - 13 = 25 + (-13) = 12 è compreso nell’intervallo
Vogliamo calcolare -25 - 13
-25 - 13 = -25 + (-13) = -38 non è compreso nell’intervallo
100111+
-25
(25 = 0 1 1 0 0 1)
110011=
-13
(13 = 0 0 1 1 0 1)
1011010
1
011001+
25
110011=
-13
1001100
1
+26
(13 = 0 0 1 1 0 1)
+12
1
Generato un riporto
in entrambe le
posizioni
più significative
0
Generato un riporto solo
nella posizione più
significativa
Daniela Fogli – Elementi di Informatica e Programmazione
Daniela Fogli – Elementi di Informatica e Programmazione
37
Esercizio d’esame (1)
38
Soluzione (cont.)
Somma algebrica:
Rappresentare i numeri –51 e –98 (in base 10) in notazione binaria in
complemento a due con 8 bit. Eseguire la somma algebrica dei numeri così
ottenuti e commentare il risultato. [3 punti]
11001101 +
10011110 =
1 01101011
Soluzione
Commento (= dire se c’è overflow e spiegare perché nel dettaglio):
- riporto generato in posizione 6: NO
- riporto generato in posizione 7: SI
Poiché i riporti generati nei bit di posizione 6 e 7 sono diversi ho un caso di
overflow
Conversione nella notazione binaria dei numeri (valori assoluti)
51 = 001100112
(32 + 16 + 2 + 1)
98 = 011000102
(64 + 32 + 2)
NB: la cosa è evidente anche dal fatto che dalla somma di due numeri negativi
ottengo un numero positivo. In effetti con 8 bit posso esprimere in
complemento a due i numeri da –128 a +127 [nella pratica da –127 a + 127],
mentre si ha –51 –98 = –149.
Rappresentazione in complemento a due:
-51 = 11001101
-98 = 10011110
ERRORE TIPICO:
Dire che c’è overflow perché “i bit del risultato di posiz. più significativa sono
diversi”. In questo caso è vero, ma non c’entra nulla con l’overflow!
Daniela Fogli – Elementi di Informatica e Programmazione
39
Daniela Fogli – Elementi di Informatica e Programmazione
40
Esercizio d’esame (2)
Soluzione (cont.)
Rappresentare i numeri –54 e –44 (in base 10) in notazione binaria in
complemento a due con 8 bit. Eseguire la somma algebrica dei numeri così
ottenuti e commentare il risultato. [3 punti]
Somma algebrica:
11001010 +
11010100 =
1 10011110
Soluzione
Conversione nella notazione binaria dei numeri (valori assoluti)
54 = 001101102
(32+16+4+2)
e quindi il risultato è 10011110.
44 = 001011002
(32+8+4)
Commento:
Non c’è overflow perché i riporti generati nelle posizioni 6 e 7 sono uguali (1 e
1). In effetti risulta un numero negativo pari a – 01100010due = – (64+32+2) =
–98dieci, che è proprio –54 – 44
Rappresentazione in complemento a due dei numeri (con 8 bit)
-54 = 11001010
-44 = 11010100
Daniela Fogli – Elementi di Informatica e Programmazione
Daniela Fogli – Elementi di Informatica e Programmazione
41
Un possibile errore
42
Esercizio d’esame (3)
Dimenticarsi del numero di bit (8):
54 = 1101102
44 = 1011002
Rappresentare i numeri 96 e 69 (in base 10) in notazione binaria in
complemento a due con 8 bit. Eseguire la somma algebrica dei numeri così
ottenuti e commentare il risultato. [3 punti]
-54 = 001010
-44 = 010100
Soluzione
e sommando:
Rappresentazione in complemento a due con 8 bit:
001010+
010100=
011110
96 =
01100000
69 =
01000101
Somma algebrica:
01100000+
01000101=
10100101
risultato che non ha alcun senso!!!
(NB: in questo caso l’esercizio è valutato 0 punti!)
Daniela Fogli – Elementi di Informatica e Programmazione
43
Daniela Fogli – Elementi di Informatica e Programmazione
44
Soluzione (cont.)
Esercizi
Commento:
Dati i seguenti numeri decimali interi positivi:
55, 121, 16, 42
Ho overflow perchè i riporti sono diversi (ho soltanto il riporto nel bit 7), cosa
deducibile anche dal fatto che il risultato ha il “bit di segno” pari a 1
(rappresenta un numero negativo ottenuto dalla somma di due positivi!).
Rappresentarli come numeri binari su 8 bit
Determinare i numeri negativi corrispondenti in binario
con le seguenti rappresentazioni:
Valore assoluto e segno
In complemento a 1
In complemento a 2
ERRORE TIPICO: complementare i due numeri che in realtà sono positivi
Daniela Fogli – Elementi di Informatica e Programmazione
45
Esercizi
Fare la somma dei numeri binari in complemento a 2
codificati su n = 8 bit che corrispondono ai numeri
16dieci e –42dieci
Fare la somma dei numeri binari in complemento a 2
codificati su n = 6 bit che corrispondono ai numeri
–5dieci e –28dieci
Daniela Fogli – Elementi di Informatica e Programmazione
47
Daniela Fogli – Elementi di Informatica e Programmazione
46
Tipologie di codici
Elementi di Informatica e
Programmazione
Nel seguito vedremo tipologie di rappresentazioni
diverse:
La Codifica dell’informazione
(parte 3)
Senza assumere limitazioni sul numero di bit a disposizione:
per numeri [notazione binaria, ovvero posizionale con base 2]
Disponendo di un numero di bit limitato:
Corsi di Laurea in:
numeri naturali
interi relativi [valore assoluto e segno, compl. a 1, compl. a 2]
“reali” [virgola fissa e virgola mobile]
valori logici, caratteri alfabetici, testi
suoni, immagini e sequenze video
codici per la rilevazione e correzione di errori
Ingegneria Civile
Ingegneria per l’Ambiente e il Territorio
Università degli Studi di Brescia
Codici di compressione (senza | con perdita)
Docente: Daniela Fogli
Daniela Fogli – Elementi di Informatica e Programmazione
Formato
Rappresentazione dei numeri reali
Per rappresentare numeri come
In entrambi i casi, una rappresentazione è definita
mediante un formato
1/3 = 0.33333333333….
π = 3.141592653…
2 = 1.4142135…
Il numero n di bit a disposizione
I campi in cui sono suddivisi i bit
servirebbe un numero di cifre illimitato
Quanti
In che ordine
Quanti bit per ciascun campo
Cosa rappresenta ciascun campo
Nel calcolatore è possibile usare solo successioni di bit
di lunghezza finita
Necessaria approssimazione
2 modalità
Esempio di formato a 32 bit
Rappresentazione in virgola fissa
(non usata nei calcolatori)
Rappresentazione in virgola mobile
Daniela Fogli – Elementi di Informatica e Programmazione
2
3
S
E
M
1
8
23
Vedremo poi il significato…
Daniela Fogli – Elementi di Informatica e Programmazione
4
Rappresentazione in virgola fissa
Altro esempio
Abbiamo n bit a disposizione (e vogliamo rappresentare numeri reali):
- un campo del formato rappresenta la parte intera
- un campo del formato rappresenta la parte frazionaria
Esempio: n = 32 bit
31
Esempio: n = 24 bit (3 byte)
Parte intera
2 byte (16 bit)
Parte decimale
16 bit
Valore massimo rappresentabile in questo formato?
1111111111111111.1111111111111111
0 0 0 0 0 0 0 1 (2-8)
5
16 bit
16 bit
Daniela Fogli – Elementi di Informatica e Programmazione
6
Intervallo di rappresentazione:
in generale
Intervallo di rappresentazione: esempio
Nel formato precedente a 32 bit
Numero massimo rappresentabile NMAX
111……………………111 111……………………111
- Parte intera: 216 – 1 = 65535
- Parte frazionaria:
0.1111111111111111 +
0.0000000000000001 =
1.0000000000000000
16 bit
00000000000011010100000000000000
1 byte (8 bit)
Daniela Fogli – Elementi di Informatica e Programmazione
Parte frazionaria
Es. 13.25dieci sarebbe rappresentato così
Il numero più piccolo rappresentabile maggiore di 0 è:
0000000000000000
0
16 15
Parte intera
nI bit
2-16
Max parte intera: 2nI-1
Max parte frazionaria: 1 - 2-nF
se nF grande, 1 - 2-nF pari a circa 1
⇒ 1 - 2-16 = 0.9999847421 circa 1
NMAX = (2nI-1) + (1 - 2-nF)
se nF grande, NMAX pari a circa 2nI
NMAX = 65535.9999847421 circa 65536
Daniela Fogli – Elementi di Informatica e Programmazione
nF bit
7
Daniela Fogli – Elementi di Informatica e Programmazione
8
Granularità
Un inconveniente
Con la rappresentazione precedente, vogliamo rappresentare un
numero “grande”, ad esempio 60.000
Qual è la “precisione” della rappresentazione in virgola fissa?
Granularità: differenza tra un numero e il successivo
rappresentabile quanto più è piccola, tanto più precisa è la
rappresentazione!
1110101001100000
a cosa mi servono questi?
Dato un numero, rappresentato, qual è il successivo?
⇒ Molto meglio un campo più grande per la parte intera!
Es. 00000000000011010100000000000000
0.0000000000000001
00000000000011010100000000000001
In generale: la granularità è fissa e pari a
Vogliamo rappresentare un numero “piccolo”, ad esempio 2-15
0000000000000000
Daniela Fogli – Elementi di Informatica e Programmazione
a cosa mi servono questi?
⇒ Molto meglio un campo più grande per la parte frazionaria!
9
Daniela Fogli – Elementi di Informatica e Programmazione
10
Notazione scientifica
Alcuni esempi pratici
Massa dell’elettrone: 9 x 10-28 grammi
Per semplicità, vediamola prima in base 10
0000000000000000000000000000000000.0000000000000000000000000009
Massa del sole: 2 x
0000000000000010
2-nF
Per un qualsiasi numero rappresentabile I, il successivo è I + 2-nF
1033
0000000000000000
Un numero in base 10 viene rappresentato come
grammi
2000000000000000000000000000000000.0000000000000000000000000000
m x 10 exp
Potrei rappresentare tutti i numeri con 34 cifre a sinistra della
virgola e 28 cifre a destra, ma in questo modo spreco le cifre
disponibili!
base
mantissa esponente
Si vuole un sistema di rappresentazione in cui l’intervallo dei
numeri esprimibili sia indipendente dal numero di cifre
Esempio: 159 300 000 = +1.593 x 108 dove m=+1.593 ed e=8
significative
Esempio: -0.00001593 = -1.593 x 10-5 dove m= -1.593 ed e=-5
Ovvero un sistema in cui la granularità dipende dal numero
rappresentato: si estende così l’intervallo dei numeri
rappresentabili
Daniela Fogli – Elementi di Informatica e Programmazione
11
Daniela Fogli – Elementi di Informatica e Programmazione
12
Nel calcolatore:
Rappresentazione in virgola mobile
Notazione scientifica
per numeri binari
Virgola mobile o Floating point
Il numero 101010000due può essere rappresentato come
1.0101 x
28
Dato un numero da rappresentare N:
esponente
N = ±mant*2esp
mantissa
base
Altri esempi:
un numero molto grande come
101101011100000000000000000000000000000.000000
diventa
1011010111*229
FORMATO
Esempio di formato: sM
un numero molto piccolo come
0.00000000000000000000000000000000000011011011
diventa
0.11011011*2-36
Daniela Fogli – Elementi di Informatica e Programmazione
Si memorizzano
segno, mantissa ed esponente
|mant|
nM bit
esp
nE bit
Daniela Fogli – Elementi di Informatica e Programmazione
13
Problema
14
Standard IEEE 754
N = ±mant*2esp
Necessità di uniformare la precisione del calcolo (calcolatori di
produttori diversi con strutture differenti)
Lo standard IEEE* 754 stabilisce la lunghezza di mantissa ed
esponente
In questo modo la rappresentazione non è univoca:
32 bit per i numeri in precisione singola
0.1due = 1 * 2-1 mant = 1 esp = -1
1 bit segno, 8 bit esponente, 23 bit mantissa
= 10 * 2-2 mant = 10 esp = -2
1
= 0.1 * 20 mant = 0.1 esp = 0
8
23
64 bit per i numeri in precisione doppia
1 bit segno, 11 bit esponente, 52 bit
mantissa
⇒ si stabilisce la “forma normalizzata” della mantissa
1
*Institute
Daniela Fogli – Elementi di Informatica e Programmazione
15
11
52
of Electrical and Electronic Engineering
Daniela Fogli – Elementi di Informatica e Programmazione
16
Nota sulla rappresentazione
dell’esponente
IEEE 754 Singola Precisione
S
E
M
1
8
23
Segno S: 0 segno +
255
Esempio: num= -3.5
1 segno -
Numeri positivi
Segno: 1
Normalizzazione e mantissa
N = 1.xxxxxxxxx
127
+128
* 2esp
23 bit (M)
hidden bit
num = 11.1
= 1.11 * 21
M = 1100…0
+127
Numeri negativi
0
Rappresentazione dell’esponente
0
E = 1 +127 = 128
= 10000000
E = esp + 127
Rappresentazione in 8 bit a eccesso 127,
con le configurazioni 00000000 e 11111111
non ammesse (-126 ≤ esp ≤ 127)
11000000011000000000000000000000
Daniela Fogli – Elementi di Informatica e Programmazione
-127
Daniela Fogli – Elementi di Informatica e Programmazione
17
Esercizio d’esame (1)
Esercizio d’esame (2)
Se il campo esponente di una codifica contiene il numero 00111011
qual è il valore decimale dell’esponente?
[2 punti]
Ricavare il valore decimale del seguente numero in virgola mobile
rappresentato secondo lo standard IEEE 754 a 32 bit: [3 punti]
0 10000000 10000000000000000000000
Soluzione
Soluzione
E = esp + 127
Segno: +
valori rappresentabili da –127 a +128
(NB: gli estremi non sono utilizzati propriamente)
Esponente:
Nel caso specifico:
18
E = 59
quindi esp = 59-127 = -68
Mantissa:
E = 27 = 128
esp = 128-127 = 1
mant = 1.1
⇒ N = 1.1due * 21 = 11due = 3dieci
Daniela Fogli – Elementi di Informatica e Programmazione
19
Daniela Fogli – Elementi di Informatica e Programmazione
20
Esercizio d’esame (3)
Normalizzazione
PASSAGGIO IMPORTANTE: normalizzazione
Rappresentare il numero decimale –4.5 secondo lo standard in
virgola mobile IEEE 754 a 32 bit. [3 punti]
ESEMPIO 1
Soluzione
Rappresentazione binaria:
1001.01001 =
1.00101001 * 23
(forma normalizzata)
Segno: 1
Rapp. binaria:
4.5dieci = 100.1due
Forma normalizzata:
N = 1.001 * 22
ESEMPIO 2
Esponente:
esp = 2
⇒ IEEE754:
⇒
E = 2+127 = 129dieci =
10000001
Rappresentazione binaria:
0.001011 =
1.011 * 2-3
(forma normalizzata)
1 10000001 00100000000000000000000
Daniela Fogli – Elementi di Informatica e Programmazione
Daniela Fogli – Elementi di Informatica e Programmazione
21
22
Esempio:
IEEE 754 con singola precisione
L’insieme dei numeri in virgola mobile
non coincide con R
MinExp = -126
MaxExp = +127
[estremi per scopi speciali]
L’insieme dei numeri reali è denso e illimitato
L’insieme dei numeri in virgola mobile non è denso ed
è limitato tra un numero reale massimo ed uno
minimo esprimibili
Numero più grande normalizzato: ± 1.11…12 * 2127 ≈ 2*2127 = 2128
Numero più piccolo normalizzato: ± 1.00…02 * 2-126 = 2-126
⇒ L’aritmetica “reale” del calcolatore è diversa da
quella classica
OVERFLOW -
-∞
∞
-2128
NORMALIZZATI -
DENORM.-
-2-126
UNDERF. DENORM.+
-2-149 0 2-149
NORMALIZZATI +
2-126
OVERFLOW +
2128
+∞
∞
NB: nel caso della virgola fissa, l’intervallo dei valori rappresentabili
sarebbe molto più limitato. Es:
- anche se dedicassimo tutti i 32 bit alla parte intera, max 232
- anche se dedicassimo tutti i 32 bit alla parte fraz, min 2-32
Daniela Fogli – Elementi di Informatica e Programmazione
23
Daniela Fogli – Elementi di Informatica e Programmazione
24
I problemi che nascono dalla natura
digitale del calcolatore
E lo zero???
I numeri nelle regioni (-∞, -2128), (-2-126, 0), (0, 2-126),
(2128 , +∞) non possono essere rappresentati
In generale lo zero non si potrebbe rappresentare
perché la mantissa è sempre 1.M …
Determiniamo quanti numeri possono essere rappresentati
Si usa un valore speciale dell’esponente (E = 0) e si
pone la mantissa a 0000….000
questa rappresentazione significa “0”
la mantissa varia da m = 1.0..0 a 1.1..1 (223 numeri)
l’esponente varia da e = -126 a + 127 (254 ordini di grandezza)
in totale: 223 x 254 numeri positivi, 223 x 254 numeri negativi, e lo
zero 4.261.412.865 numeri
Altri casi particolari di E (E=0 oppure E=255) per
rappresentare ±∞, risultati di operazioni non valide,
numeri denormalizzati
I due intervalli di numeri positivi e negativi esprimibili non formano
insiemi continui: i numeri non sono cioè uniformemente
distribuiti (più radi per valori elevati dell’esponente e più fitti per
valori piccoli dell’esponente – si infittiscono nei pressi dello zero)
Daniela Fogli – Elementi di Informatica e Programmazione
Esempio
-∞
∞
NORMALIZZATI -
-2128
NORMALIZZATI +
-2-126
0
26
Operazioni sui numeri “reali”
Addizione e sottrazione:
La separazione fra 1.0..00 x 299 e 1.0..01 x 299 (ovvero, 2-23+99 = 276)
è molto maggiore di quella fra 1.0..00 x 20 e 1.0..01 x 20 (ovvero, 2-23)
OVERFLOW -
Daniela Fogli – Elementi di Informatica e Programmazione
25
2-126
OVERFLOW +
2128
+∞
∞
si trasformano (con eventuale perdita di precisione) gli addendi in
una rappresentazione con uguale esponente (il maggiore)
si sommano (sottraggono) le mantisse
si normalizza se necessario
Moltiplicazione:
si sommano gli esponenti
si moltiplicano le mantisse
si normalizza se necessario
1.0..00
Divisione:
si sottraggono gli esponenti
si dividono le mantisse
si normalizza se necessario
1.0..00 x 299
La precisione è “concentrata” dove ce n’è bisogno!
Daniela Fogli – Elementi di Informatica e Programmazione
27
Daniela Fogli – Elementi di Informatica e Programmazione
28
Esempio di addizione
Problemi con le operazioni
Somma tra i seguenti due numeri rappresentati IEEE 754:
0 01111011 000…111
e
Addizioni e sottrazioni possono dare luogo a errori
0 01111101 000…011
E = 123 (– 127 = -4)
Esempio: sottrazione fra due numeri quasi uguali
E = 125 (– 127 = -2)
Porto l’esponente del primo operando a -2:
1.000…111 x 2-4 = 0.010…001 x 2-2
Sommo le mantisse:
può dar luogo al fenomeno della cancellazione
(risultato = 0)
Nota: perdo le 2
cifre meno
significative della
mantissa
Divisione per numeri molto piccoli
0.010…001 + [ x 2-2]
1.000…011 = [ x 2-2]
[ x 2-2] NB: risultato già normalizzato!
1.010…100
Risulta quindi
il risultato può cadere nell’intervallo di overflow
(+ o -)
0 01111101 010…100
NB: le cose sono leggermente più complicate, ma l’idea è questa …
Daniela Fogli – Elementi di Informatica e Programmazione
29
Fenomeno della cancellazione:
esempio
Daniela Fogli – Elementi di Informatica e Programmazione
30
Esercizi
Se ho la sottrazione
Esprimere i numeri decimali 45.25, -234.875, 67.75, -83.8125 in
codifica binaria secondo lo standard IEEE 754 (in singola
precisione a 32 bit)
1.11100…0 x 2-126 1.11000…0 x 2-126 =
0.00100…0 x 2-126
Ricavare il valore decimale dei seguenti numeri in virgola mobile
rappresentati secondo lo standard IEEE 754 a 32 bit:
che normalizzato diventerebbe 1.0…0 x 2-129 che
viene dunque approssimato con 0, perché il minimo
esponente esprimibile è -126
0 10000100 00010001000000000000000
1 10000001 01010110000000000000000
NB: in realtà, è possibile esprimere numeri “denormalizzati”
prossimi allo 0, fino a 2-149, ma noi non ce ne occupiamo
(vedere libro per gli interessati)
Daniela Fogli – Elementi di Informatica e Programmazione
31
Daniela Fogli – Elementi di Informatica e Programmazione
32
Tipologie di codici
Codifica binaria di valori logici
Nel seguito vedremo tipologie di rappresentazioni
diverse:
Valore logico: esprime il “valore di verità” di un determinato fatto
Esempi
Senza assumere limitazioni sul numero di bit a disposizione:
per numeri [notazione binaria, ovvero posizionale con base 2]
Disponendo di un numero di bit limitato:
- Il voto del mio compito di informatica A è sufficiente (F1)
- Una squadra di pallavolo in campo è costituita da 6 giocatori (F2)
numeri naturali
interi relativi [valore assoluto e segno, compl. a 1, compl. a 2]
“reali” [virgola fissa e virgola mobile]
valori logici, caratteri alfabetici, testi
suoni, immagini e sequenze video
codici per la rilevazione e correzione di errori
Il fatto F1 è vero oppure falso, non entrambi (lo stesso per F2)
Codici di compressione (senza | con perdita)
Daniela Fogli – Elementi di Informatica e Programmazione
33
Algebra di Boole
Daniela Fogli – Elementi di Informatica e Programmazione
34
Variabili booleane
E’ un particolare tipo di algebra che include:
Una variabile booleana è una variabile binaria che
può assumere uno dei due valori logici denotati con 0 e
1 (oppure Falso e Vero)
un insieme di supporto A (l’insieme {0,1} o {V,F} nel ns caso)
degli operatori binari: AND (—) e OR (+)
un operatore complemento: NOT (‾)
Usiamo ad esempio i simboli x, y, z, … per indicare
variabili booleane
Gli operatori soddisfano certe proprietà che si deducono da un
insieme di assiomi
Può essere x = 1 oppure x = 0
E’ lo strumento matematico su cui si fonda il funzionamento dei
circuiti digitali
Daniela Fogli – Elementi di Informatica e Programmazione
35
Daniela Fogli – Elementi di Informatica e Programmazione
36
Assiomi dell’Algebra di Boole
Operatori booleani e Tabelle di Verità
Operatori booleani (o logici) fondamentali:
NOT
AND
OR
not(x), x, ~x
x and y, x • y, xy
x or y, x + y
Negazione Logica
Prodotto Logico
Somma Logica
x1
x0
x1 • x0
x1
x0
x1 + x0
0
0
0
0
0
0
0
1
0
0
1
1
1
0
0
1
0
1
1
1
1
1
1
1
AND
x
x
0
1
1
0
Forma AND
Forma OR
Commutatività
AB = BA
A+B = B+A
Distributività
A+BC=(A+B)(A+C)
A(B+C)=AB+AC
Identità
1A = A
0+A = A
Inverso
AĀ = 0
A+Ā = 1
NOT
OR
Daniela Fogli – Elementi di Informatica e Programmazione
Daniela Fogli – Elementi di Informatica e Programmazione
37
Formule (espressioni)
booleane (logiche)
Proprietà dell’Algebra di Boole
Forma AND
38
Forma OR
Elemento nullo
0A = 0
1+A = 1
Idempotenza
AA = A
A+A = A
Assorbimento
A(A+B) = A
A+AB=A
Associatività
(AB)C=A(BC)
(A+B)+C=A+(B+C)
De Morgan
AB = A+B
A+B = A B
Altre proprietà della negazione logica:
1.
Le costanti 0 e 1 e le variabili (simboli a cui possono essere
associati i valori 0 e 1) sono formule booleane
2.
Se E, E1 ed E2 sono formule booleane lo sono anche (E1+E2),
(E1—E2) e (E)
3.
Non esistono altre formule oltre a quelle che possono essere
generate da un numero finito di applicazioni delle regole 1 e 2
1=1
0=0
Daniela Fogli – Elementi di Informatica e Programmazione
39
Daniela Fogli – Elementi di Informatica e Programmazione
40
Equivalenza fra formule booleane
Esempi
Esempi di formule booleane
((x+y)—z)
x1x2 + x1x2x3 = x1 (x2+x2x3)
((x1—x2)+(x3—(x4+x5)))
x1 + x2 + x2x3 + x2x3 = x1 + x2 + x3(x2+x2) = x1 + x2 +
x3
Valgono le regole classiche di semplificazione delle parentesi e di
priorità degli operatori:
x1x2 + x1x2x3 + x1x2 = x1x2 + x1x2x3 = x1x2 (1 +x3) = x1x2
((x1—x2)+(x3—(x4+x5))) ⇒ x1—x2+x3—(x4+x5)
… e il simbolo “—” di solito si omette
Equivalenza di formule booleane:
per ogni combinazione di valori delle variabili le formule
restituiscono lo stesso valore
Daniela Fogli – Elementi di Informatica e Programmazione
Equivalenza fra formule booleane
Verifica tramite tabella
x2
0
0
1
1
0
0
1
1
x1
0
1
0
1
0
1
0
1
x2
1
1
0
0
1
1
0
0
Assorbimento:
x2x3 x2x3 x1+x2+x2x3+x2x3 x1+x2+x3
0
0
0
0
0
0
1
1
0
0
1
1
0
0
1
1
0
1
1
1
0
1
1
1
1
0
1
1
1
0
1
1
Daniela Fogli – Elementi di Informatica e Programmazione
42
Tabelle di verità e proprietà dell’Algebra
di Boole: Esempio
x1 + x2 + x2x3 + x2x3 = x1 + x2 + x3
x3
0
0
0
0
1
1
1
1
Daniela Fogli – Elementi di Informatica e Programmazione
41
x
0
0
1
1
43
y
0
1
0
1
x(x+y) = x
x+y x(x+y)
0
0
1
0
1
1
1
1
Daniela Fogli – Elementi di Informatica e Programmazione
44
Tabelle di verità e proprietà dell’Algebra
di Boole: Esempio (2)
Tabelle di verità e proprietà dell’Algebra
di Boole: Esempio (3)
NB: si può usare anche una diversa simbologia per i valori …
Assorbimento:
x
F
F
V
V
y
F
V
F
V
x(x +y) = x
Assorbimento:
x
F
F
V
V
x+y x(x+y)
F
F
V
F
V
V
V
V
Daniela Fogli – Elementi di Informatica e Programmazione
45
Tabelle di verità e proprietà dell’Algebra
di Boole: Esempio
Proprietà di De Morgan:
x
0
0
1
1
y
0
1
0
1
xy
0
0
0
1
xy
1
1
1
0
x
1
1
0
0
Daniela Fogli – Elementi di Informatica e Programmazione
y
F
V
F
V
x AND (x OR y) = x
x OR y
F
V
V
V
x AND (x OR y)
F
F
V
V
Daniela Fogli – Elementi di Informatica e Programmazione
46
Esercizi
Costruire le tabelle di verità delle seguenti formule booleane:
1. (x + y) + (xy) che è equivalente a scrivere
(x OR y) OR NOT(x AND y)
2. ((x + z) + y) + (xz) che è equivalente a scrivere
NOT ((x OR z) OR y) OR (x AND z)
xy= x+y
y
1
0
1
0
… o per gli operatori …
x+y
1
1
1
0
Usando gli assiomi e le proprietà dell’algebra di Boole
dimostrare le seguenti equivalenze di formule booleane:
1. xyz + xyz + xyz + x = x
2. x y + x y + x y = x + y
47
Daniela Fogli – Elementi di Informatica e Programmazione
48
Tipologie di codici
Codifica binaria dei caratteri
Quanti oggetti?
10 cifre
26 lettere minuscole + 26 lettere maiuscole = 52
~30 segni di interpunzione
~30 caratteri di controllo (LF, CR, EOF, …)
~120 oggetti ⇒ k = log2120 = 7 (sufficienti 7 bit)
Nel seguito vedremo tipologie di rappresentazioni
diverse:
Senza assumere limitazioni sul numero di bit a disposizione:
per numeri [notazione binaria, ovvero posizionale con base 2]
Disponendo di un numero di bit limitato:
numeri naturali
interi relativi [valore assoluto e segno, compl. a 1, compl. a 2]
“reali” [virgola fissa e virgola mobile]
valori logici, caratteri alfabetici, testi
suoni, immagini e sequenze video
codici per la rilevazione e correzione di errori
Il codice ASCII utilizza 7 bit e quindi può rappresentare al
massimo n = 27 = 128 caratteri
Codice ASCII esteso: utilizza 8 bit e quindi codifica 256
caratteri
Codice UNICODE: utilizza 16 bit e quindi codifica 65536
caratteri (anche quelli delle lingue orientali… non tutti! Sono
circa 200 000! …e aumentano!) ⇒ Estensione a 21 bit del
codice UNICODE
Codici di compressione (senza | con perdita)
Daniela Fogli – Elementi di Informatica e Programmazione
49
Daniela Fogli – Elementi di Informatica e Programmazione
50
ASCII Table
Dec Hx Oct Char
Dec Hx Oct Char
Dec Hx Oct Char
Dec Hx Oct Char
---------------
---------------
---------------
---------------
0
0 000 NUL (null)
32 20 040 SPACE
64 40 100 @
96 60 140 `
1
1 001 SOH (start of heading)
33 21 041 !
65 41 101 A
97 61 141 a
2
2 002 STX (start of text)
34 22 042 "
66 42 102 B
98 62 142 b
3
3 003 ETX (end of text)
35 23 043 #
67 43 103 C
99 63 143 c
4
4 004 EOT (end of transmission)
36 24 044 $
68 44 104 D
100 64 144 d
5
5 005 ENQ (enquiry)
37 25 045 %
69 45 105 E
101 65 145 e
6
6 006 ACK (acknowledge)
38 26 046 &
70 46 106 F
102 66 146 f
7
7 007 BEL (bell)
39 27 047 '
71 47 107 G
103 67 147 g
8
8 010 BS
40 28 050 (
72 48 110 H
104 68 150 h
9
(backspace)
41 29 051 )
73 49 111 I
10
A 012 LF
9 011 TAB (horizontal tab)
(NL line feed, new line) 42 2A 052 *
74 4A 112 J
106 6A 152 j
11
B 013 VT
(vertical tab)
75 4B 113 K
107 6B 153 k
12
C 014 FF
(NP form feed, new page) 44 2C 054 ,
76 4C 114 L
108 6C 154 l
13
D 015 CR
(carriage return)
45 2D 055 -
77 4D 115 M
109 6D 155 m
14
E 016 SO
(shift out)
46 2E 056 .
78 4E 116 N
110 6E 156 n
15
F 017 SI
(shift in)
47 2F 057 /
79 4F 117 O
111 6F 157 o
16 10 020 DLE (data link escape)
48 30 060 0
80 50 120 P
112 70 160 p
17 11 021 DC1 (device control 1)
49 31 061 1
81 51 121 Q
113 71 161 q
18 12 022 DC2 (device control 2)
50 32 062 2
82 52 122 R
114 72 162 r
19 13 023 DC3 (device control 3)
51 33 063 3
83 53 123 S
115 73 163 s
52 34 064 4
84 54 124 T
116 74 164 t
20 14 024 DC4 (device control 4)
43 2B 053 +
53 35 065 5
85 55 125 U
117 75 165 u
22 16 026 SYN (synchronous idle)
54 36 066 6
86 56 126 V
118 76 166 v
23 17 027 ETB (end of trans. block)
55 37 067 7
87 57 127 W
119 77 167 w
24 18 030 CAN (cancel)
56 38 070 8
88 58 130 X
120 78 170 x
57 39 071 9
89 59 131 Y
(end of medium)
In generale interessa rappresentare non solo i caratteri che
compongono un testo ma anche altre caratteristiche di
formattazione quali:
lo stile di scrittura (grassetto, corsivo, sottolineato,…)
la dimensione del carattere
il tipo o “font” (times new roman, arial, courier,…)
l’ampiezza dei margini della pagina
…
105 69 151 i
21 15 025 NAK (negative acknowledge)
25 19 031 EM
Codifica binaria di testi
Esistono diversi codici, detti formati che consentono di
rappresentare un insieme più o meno ampio di caratteristiche:
testo semplice (text o txt): corrisponde a una sequenza di caratteri
ASCII senza caratteristiche di formattazione
testo arricchito (rich text format o rtf): in grado di rappresentare
un ristretto insieme di formattazioni (stile, dimensione, colori)
testo Word (document o doc): in grado di rappresentare un insieme
ampio di formattazioni
121 79 171 y
26 1A 032 SUB (substitute)
58 3A 072 :
90 5A 132 Z
122 7A 172 z
27 1B 033 ESC (escape)
59 3B 073 ;
91 5B 133 [
123 7B 173 {
28 1C 034 FS
(file separator)
60 3C 074 <
92 5C 134 \
124 7C 174 |
29 1D 035 GS
(group separator)
61 3D 075 =
93 5D 135 ]
125 7D 175 }
30 1E 036 RS
(record separator)
62 3E 076 >
94 5E 136 ^
126 7E 176 ~
31 1F 037 US
(unit separator)
63 3F 077 ?
95 5F 137 _
127 7F 177 DEL
Daniela Fogli – Elementi di Informatica e Programmazione
51
Daniela Fogli – Elementi di Informatica e Programmazione
52
Formati dei documenti
per stampa e visualizzazione
Formati standardizzati che sono orientati alla
produzione di documenti destinati a stampa e
visualizzazione:
Documenti in formato PDF (Portable Document Format,
formato di documento portabile)
Documenti in formato PS (Postcript) - l’applicazione GSview
(Ghostview) legge il formato postcript
Non limitati alla rappresentazione di testo ma possono
includere anche immagini e disegni
Daniela Fogli – Elementi di Informatica e Programmazione
53
Tipologie di codici
Elementi di Informatica e
Programmazione
Nel seguito vedremo tipologie di rappresentazioni
diverse:
La Codifica dell’informazione
(parte 4)
Senza assumere limitazioni sul numero di bit a disposizione:
per numeri [notazione binaria, ovvero posizionale con base 2]
Disponendo di un numero di bit limitato:
Corsi di Laurea in:
numeri naturali
interi relativi [valore assoluto e segno, compl. a 1, compl. a 2]
“reali” [virgola fissa e virgola mobile]
valori logici, caratteri alfabetici, testi
suoni, immagini e sequenze video
codici per la rilevazione e correzione di errori
Ingegneria Civile
Ingegneria per l’Ambiente e il Territorio
Università degli Studi di Brescia
Codici di compressione (senza | con perdita)
Docente: Daniela Fogli
Daniela Fogli – Elementi di Informatica e Programmazione
Rappresentazione di informazioni
multimediali
2
La digitalizzazione
Con appositi metodi e codifiche si possono rappresentare
informazioni complesse con sequenze di bit:
Immagini
Filmati
Suoni
rappresentazione anche
approssimata tramite
sequenze di bit
• Voce
I problemi collegati alla gestione della rappresentazione,
memorizzazione e elaborazione di queste informazioni sono:
la richiesta di elevate capacità di elaborazione (es: calcoli
necessari per riprodurre un video codificato in divx)
occupazione elevata di memoria: per questo si utilizzano
tecniche di compressione dei dati che consentono di ridurre la
richiesta di memoria
• Suoni
0010010100
0010010100
• Immagini
Nel calcolatore
• Filmati
Informazione
“continua”
Daniela Fogli – Elementi di Informatica e Programmazione
3
Daniela Fogli – Elementi di Informatica e Programmazione
4
In cosa consiste la digitalizzazione?
Codifica di un suono…
Problema: codificare tramite una sequenza di bit una
… in una sequenza di bit attraverso
campionamento (nel tempo) e
quantizzazione (in ampiezza)
grandezza fisica (es. volume di un suono) i cui valori si
assumono variabili in un intervallo continuo
Soluzione: processo di digitalizzazione (o
conversione analogica-digitale)
Comprende 2 attività:
Frequenza di campionamento:
numero di campioni acquisiti nell’unità
di tempo (es. numero di campioni al
secondo, misurato in Hertz) - Es.
frequenza di 5 Hz significa acquisizione
di 5 campioni al secondo
Quantizzazione: discretizzazione dei valori attraverso
approssimazione con uno dei valori compresi fra quelli previsti
nella codifica
Campionamento: se la grandezza inoltre varia anche nel
tempo (es. un suono) o nello spazio (es. colore di
un’immagine) occorre selezionare un insieme finito di valori, ad
intervalli (nel tempo o nello spazio) costanti
Daniela Fogli – Elementi di Informatica e Programmazione
Il numero di bit necessari per
codificare ogni valore è il parametro
che qualifica la quantizzazione - Es. con
8 bit posso codificare 256 valori diversi
La quantizzazione è su 4 livelli, quindi il risultato
del campionamento è A2A2A0A1A3A3A1
La successione (codifica digitale) potrebbe essere
10 10 00 01 11 11 01
Daniela Fogli – Elementi di Informatica e Programmazione
5
Rappresentazione dei suoni
nei CD audio
Per ciascun intervallo di tempo viene scelto
l’istante di campionamento ti in cui viene rilevato
il valore della grandezza
6
Dal mondo reale al calcolatore
(e viceversa)
Segnali audio:
Dal mondo reale al calcolatore
onde analogiche campionamento + quantizzazione valori digitali
DIGITALIZZAZIONE
(campionam. & quantizz.)
Frequenza di campionamento:
fc = 44.1 kHz (44.100 campioni) per i 2 canali
NB: HW per
acquisizione sonora
(es. microfono)
Quantizzazione:
16 (2 byte) bit/campione = 65536 valori diversi per campione (numero
di livelli di quantizzazione)
memorizzazione,
eventuali elaborazioni…
Dal calcolatore al mondo reale
Il numero di bit memorizzati è dunque:
Nbit = F(durata, fc, bit/campione)
0010010100
0010010100
Nel calcolatore
Nello standard CDDA (CD Digital Audio) 70 minuti registrazione
richiedono 70 x 60 x 44.100 x 2 x 2 byte ≈ 750 MByte
Daniela Fogli – Elementi di Informatica e Programmazione
…
7
CONVERSIONE
DIGITALE-ANALOGICA
NB: scheda audio riceve i valori
digitali e ricostruisce il segnale
analogico + diffusori
Daniela Fogli – Elementi di Informatica e Programmazione
8
Codifica delle immagini
Alcuni formati audio
Campionamento:
WAVE: .wav, occupano molto spazio (corrisponde a quanto visto
nei lucidi precedenti: ~1MB per minuto)
Nel caso delle immagini è una discretizzazione nello spazio: si
divide l’immagine in quadrati, per ognuno dei quali si dovrà prelevare
un campione che si considera rappresentativo di tutto il quadrato
Questi quadrati sono trattati come elementi di base dell’immagine
digitale: sono chiamati pixel
Quanti più pixel vengono considerati per unità di superficie tanto più
precisa sarà la riproduzione dell’immagine (risoluzione)
MP3 (MPEG-1 Layer 3): grande diffusione su Internet. Utilizza
tecniche di compressione per ridurre le dimensioni (vedi poi).
MPEG nasce da un gruppo di lavoro di standardizzazione
MIDI (Musical Instrument Digital Interface): .mid, i file
memorizzano non suoni ma comandi (es. le note musicali di un
particolare strumento) che vengono inviati ai dispositivi MIDI per
riprodurre i suoni, occupano molto meno spazio dei .wav.
Quantizzazione: codifica del colore associato a ogni pixel
Immagini in bianco e nero: 1 bit per pixel (b/n)
Immagine a scala di grigi: es. un byte per pixel (256 livelli di grigio)
Immagine a colori: es. con modello RGB (colore ottenuto per
sovrapposizione di Rosso Verde e Blu) 3 byte per pixel, uno per ogni
colore primario
Es: tastiera musicale + calcolatore permettono di suonare un brano su
tastiera che viene automaticamente trascritto in notazione musicale in
un file midi che può poi essere anche modificato
Daniela Fogli – Elementi di Informatica e Programmazione
9
Campionamento e quantizzazione: esempio
Daniela Fogli – Elementi di Informatica e Programmazione
10
Daniela Fogli – Elementi di Informatica e Programmazione
12
Campionamento
Maggie Cheung dal film “Hero” di Zhang Yimou (2002)
Daniela Fogli – Elementi di Informatica e Programmazione
11
Quantizzazione
Codifica bitmap (raster) di immagini
Immagine bitmap (o raster):
matrice di pixel
• L’immagine è rappresentata direttamente come matrice di pixel
• Risoluzione: num. di pixel orizzontali X num. di pixel verticali
• Ad ogni pixel è riservato un certo numero di bit:
Per ogni pixel un certo numero di byte
es. 3 byte (colori) o 1 byte (b/n)
Daniela Fogli – Elementi di Informatica e Programmazione
13
Immagini bitmap RGB
•
•
1 bit (per pixel)
2 informazioni diverse (b/n)
4 bit (per pixel)
16 colori o livelli di grigio
8 bit (per pixel)
256 colori o livelli di grigio
16 bit (per pixel)
64K colori (216 = 210 x 26)
24 bit (per pixel)
16M = 224 colori
(più di 16 milioni di colori)
Daniela Fogli – Elementi di Informatica e Programmazione
14
Problemi con immagini bitmap
L’informazione sul colore di ogni pixel occupa 3 byte, uno per ogni
colore primario (rosso, verde, blu)
Ogni ingrandimento fa perdere qualità (l’immagine si
“sgrana”) – vedi prossimo lucido
per evitare questo problema si può usare la codifica
vettoriale
La quantità di colore primario è data da un valore tra 0 e 255 (o
equivalentemente è rappresentato da una sequenza di bit a partire
da 00000000 fino a 11111111)
R=25, G=72, B=78
Occupano molta memoria. Possibili soluzioni:
uso di tavolozze (palette)
formati compressi
codifica vettoriale
R=90, G=85, B=12
R=255, G=255, B=255
R=0, G=0, B=0
Daniela Fogli – Elementi di Informatica e Programmazione
15
Daniela Fogli – Elementi di Informatica e Programmazione
16
Immagini bitmap: esempio
Uso di tavolozze (palette)
Un’immagine RGB occupa:
3 byte x risoluzione verticale x risoluzione
orizzontale
Spesso un’immagine utilizza un numero limitato di colori (scelti
comunque tra l’insieme ampio di tutti i colori rappresentabili)
Esempio: un’immagine RGB con risoluzione 1024x768
pixel necessita di più di 2 MB
Esempio banale: immagine RGB che usa due soli colori (qualsiasi)
Dimensioni senza palette: numero pixel * 3 byte
Idea: il formato memorizza i colori usati in un’area specifica
(palette) e per ogni pixel si indica quale dei due colori usato
… e se la
ingrandisco si
sgrana…
0
1
Insieme dei
16 M colori
Tavolozza
(2*3 byte)
0
1
1
…
1
1
0
Matrice (1 bit per pixel)
IMMAGINE CODIFICATA
Daniela Fogli – Elementi di Informatica e Programmazione
17
Daniela Fogli – Elementi di Informatica e Programmazione
Esercizio
Esercizio
Un’immagine di risoluzione 1024*768 utilizza 256 colori RGB.
Quali dimensioni occupa la sua codifica se si utilizza una palette?
E se non la si utilizza?
Un’immagine di risoluzione 1024*768 utilizza 256 colori RGB.
Quali dimensioni occupa la sua codifica se si utilizza una palette?
E se non la si utilizza?
18
Senza utilizzare palette:
1024 * 768 * 3 byte = 210 * 3 * 28 * 3 byte
= 2.359.296 byte
Con utilizzo di palette:
- 256 * 3 byte = 768 byte (per codificare la tavolozza)
- a cui si sommano 1024 * 768 * 1 byte (per la matrice)
⇒ TOTALE = 768 + 786.432 = 787.200 byte
Daniela Fogli – Elementi di Informatica e Programmazione
19
Daniela Fogli – Elementi di Informatica e Programmazione
20
I formati di file bitmap
Codifica vettoriale di immagini
Le immagini sono rappresentate tramite un insieme di elementi
grafici (linee, rettangoli, ellissi, archi e curve)
Memorizzazione come coordinate numeriche o formule
matematiche che specificano forma e posizione: occupa poca
memoria (es. un cerchio solo centro e raggio, una retta le
coordinate degli estremi)
Necessaria un’operazione di rendering (rasterizzazione)
che, a partire dalla descrizione matematica, produca l’immagine
raster
Programmi di tipo draw (programmi di grafica vettoriale):
es. Corel Draw, programmi di CAD, programmi di grafica
tridimensionale
Vantaggi:
BMP: formato standard non compresso per MS Windows, 24 bit
per pixel, .bmp. Gestisce palette a 2, 16, 256 colori + true color
TIFF (Tagged Image File Format): alta qualità (32 bit per pixel),
16 milioni di colori (24 bit) + ulteriori proprietà, dimensioni file
molto grandi, .tif, adottato da scanner e macchine fotografiche
FORMATI COMPRESSI:
GIF (Graphic Interchange Format): formato compresso, 8 bit per
pixel (256 colori), .gif
JPEG (Joint Picture Experts Group): 16 milioni di colori, formato
compresso (più del gif), .jpg
Controllo accurato di linee e colori
Ingrandimento, riduzione, rotazione senza perdita
Possibilità inserimento testo attorno agli oggetti
JPEG 2000: formato ancor più compresso, .j2k o .jp2
Alcuni formati: DXF, DWG, CDR, AI, WMF
Daniela Fogli – Elementi di Informatica e Programmazione
21
Daniela Fogli – Elementi di Informatica e Programmazione
22
Codifica di sequenze video
Immagini vettoriali: esempio
In teoria, una sequenza video è semplicemente una
sequenza di fotogrammi (immagini):
campionamento nel tempo (successione di fotogrammi)
ciascun fotogramma rappresentato normalmente
(campionamento nello spazio e quantizzazione)
In pratica, le dimensioni risulterebbero troppo elevate.
Facendo un conto “a spanne”, se un’immagine occupa
1 MB con 25 fotogrammi al secondo:
25 MB al secondo
25 x 60 MB al minuto = circa 1,5 GB al minuto!
Tecniche di compressione specifiche per le sequenze video
Daniela Fogli – Elementi di Informatica e Programmazione
23
Daniela Fogli – Elementi di Informatica e Programmazione
24
Mondo analogico e mondo digitale
Rappresentazione analogica e digitale
Come è rappresentato un brano musicale su un vecchio disco di vinile?
Rappresentazione analogica: le configurazioni assunte dal supporto
possono variare in modo continuo e riflettono secondo una
analogia diretta la struttura dell’informazione
Limite: applicabile solo se esiste un supporto in grado di ricreare
tra le sue configurazioni una struttura corrispondente a quella
presente sull’insieme degli elementi di informazione
rappresentazione analogica (la forma del
solco descrive per analogia il suono da
produrre)
Come è rappresentato un brano musicale su un CD?
Rappresentazione digitale: l’insieme delle configurazioni è finito (e
fissato a priori) e la struttura dell’informazione si può dedurre dalle
configurazioni solo attraverso una specifica regola di codifica.
Limite: si può rappresentare un insieme di elementi di
informazione finito e predefinito (se emerge l’esigenza di codificare
un nuovo elemento, necessario rivedere o estendere la codifica)
0101 0011 0011
rappresentazione
digitale (il supporto dà
una informazione cha va
decodificata)
Daniela Fogli – Elementi di Informatica e Programmazione
25
Daniela Fogli – Elementi di Informatica e Programmazione
26
Perché la rappresentazione digitale?
E perché proprio quella binaria?
Esempio
(a) Corrispondenza fra l’orario e la posizione dell’ago sulla scala
Una qualunque grandezza fisica può essere convertita
in forma digitale (conversione analogico-digitale o
digitalizzazione)
(b) Configurazioni convenzionali: combinazioni di segmenti illuminati
La conversione conduce a perdita di informazione (il
segnale originario non può essere ricostruito in modo
esatto a partire dal segnale digitale). Tuttavia:
Campionamento: è (almeno in linea teorica) reversibile (no perdita di
informazione) se la frequenza di campionamento è sufficientemente alta
Quantizzazione: perdita di informazione arbitrariamente piccola all’aumentare
del numero di livelli di quantizzazione
Inoltre i valori dei segnali analogici in realtà non sono tutti distinguibili (rumore,
imprecisione strumento di misura, ecc.)
Daniela Fogli – Elementi di Informatica e Programmazione
27
Daniela Fogli – Elementi di Informatica e Programmazione
28
Altre ragioni del
“predominio del digitale”
Immunità al rumore (affidabilità)
Volt
Volt
4
4
1
3
3
2
2
2.5
0
0
(a)
In realtà:
Uniformità nella rappresentazione: una varietà ristretta di
dispositivi può realizzare svariate funzioni
3.5 V
1.5 V
1
1
Molte informazioni sono di natura “prettamente simbolica”
+5 V Valore 1
5
5
0
0V
Tecniche di codifica e trasmissione uniformi su tipologie di
informazioni diverse
Valore 0
0
Elaborazione simbolica (numerica) delle informazioni digitali
(mediante operazioni matematiche) in tempi brevi
(b)
Elaborazione digitale per modificare le caratteristiche di un segnale
analogico (es. restauro di incisioni audio o di pellicole
cinematografiche)
• Con (a) sono tollerati disturbi fino a 0.5 V, con (b) fino a 1.25 V
• L’immunità al rumore risulta essere una delle ragioni fondamentali
che hanno determinato il predominio della rappresentazione digitale su
quella analogica
• In particolare la codifica binaria è quella migliore
Daniela Fogli – Elementi di Informatica e Programmazione
29
Daniela Fogli – Elementi di Informatica e Programmazione
30
Tipologie di codici
Elementi di Informatica e
Programmazione
Nel seguito vedremo tipologie di rappresentazioni
diverse:
La Codifica dell’informazione
(parte 5)
Senza assumere limitazioni sul numero di bit a disposizione:
per numeri [notazione binaria, ovvero posizionale con base 2]
Disponendo di un numero di bit limitato:
Corsi di Laurea in:
numeri naturali
interi relativi [valore assoluto e segno, compl. a 1, compl. a 2]
“reali” [virgola fissa e virgola mobile]
valori logici, caratteri alfabetici, testi
suoni, immagini e sequenze video
codici per la rivelazione e correzione di errori
Ingegneria Civile
Ingegneria per l’Ambiente e il Territorio
Università degli Studi di Brescia
Codici di compressione (senza | con perdita)
Docente: Daniela Fogli
Daniela Fogli – Elementi di Informatica e Programmazione
Un esempio: memorizzazione di
informazioni
2
Un esempio: memorizzazione di
informazioni
Informazioni da memorizzare
(ad esempio: in un CD)
Informazioni da memorizzare
(ad esempio: in un CD)
0011010100
0011010100
0011010100
0011010100
1110010100
1110010100
1110010100
1110010100
.
.
.
.
.
.
0010010100
0010010100
0010010100
0010010100
???
Daniela Fogli – Elementi di Informatica e Programmazione
3
Daniela Fogli – Elementi di Informatica e Programmazione
4
Un esempio: trasmissione di
informazioni
0011010100
0011010100
Errore
1011010100
1011010100
1110010100
1110010100
1111010000
1111010000
.
Errore: modifica di un bit (0 diventa 1 oppure 1 diventa 0)
Posso avere uno o più errori
.
.
LA SOLUZIONE
.
.
.
0010010100
0010010100
Su una sequenza di bit, usare dei codici particolari che permettono:
1010010100
1010010100
• Di rivelare la presenza di errori:
CODICI RIVELATORI
???
• Di correggere gli errori, ricostruendo la sequenza originaria:
CODICI CORRETTORI
Daniela Fogli – Elementi di Informatica e Programmazione
Daniela Fogli – Elementi di Informatica e Programmazione
5
Come?
O8
Codice ridondante
L’insieme delle codifiche è un sottoinsieme proprio del codominio
⇒ l’insieme delle non codifiche è non nullo
110
O7
100
O1
011
O3
6
codominio
101
Esempio:
codice
ridondante
a due bit
01
O2
O1
111
dominio
O6
O4
001
O5
010
00
insieme delle
codifiche
O2
000
11
insieme delle
codifiche
10
8 oggetti, 3 bit: il codice è non ridondante
dominio
insieme delle
non-codifiche
codominio
Non è possibile rivelare né correggere errori
Per esempio:
Per rivelare o correggere errori dobbiamo
introdurre della ridondanza
Daniela Fogli – Elementi di Informatica e Programmazione
se codifico O1 e ho un errore (ad esempio sul primo bit)
ottengo 10 ⇒ rivelazione dell’errore
7
Daniela Fogli – Elementi di Informatica e Programmazione
8
Quanto?
Rivelazione: l’idea
Voglio un codice che, per qualunque codifica sia in grado di
rilevare/correggere k errori comunque siano distribuiti
d=5
Esempio: un semplice codice per due entità, 5 bit
Atalanta
Brescia
00000
11111
00000
11111
Distanza tra le
codifiche: d = 5
Fino
a 4 errori
• Si può dimostrare che si possono rivelare fino a k = 4 errori
(d ≥ k+1)
Data una codifica (es. 00000) un’alterazione di un numero di bit
minore o uguale a k = 4 non può generare l’altra codifica (11111)
poiché la distanza è 5 (k + 1)
• Si può dimostrare che si possono correggere fino a k = 2 errori
(d ≥ 2k+1)
Daniela Fogli – Elementi di Informatica e Programmazione
9
Correzione: l’idea
Daniela Fogli – Elementi di Informatica e Programmazione
10
In generale
d = 5 ≥ 2k+1
k
Distanza fra due sequenze di bit: numero di bit di pari posto che
hanno diverso valore nelle due sequenze (es. la distanza fra 00010111
e 10010000 è 4)
k
≥1
00000
11111
Distanza di un codice: minimo valore delle distanze tra ogni coppia
di elementi appartenenti all’insieme delle codifiche
≥ k+1
Rivelazione e correzione di errori
Data una codifica (es. 00000) un’alterazione di un numero di bit minore o
uguale a k = 2 può generare una non-codifica che può essere corretta
associando ad essa la codifica avente distanza minima
• Per rivelare k errori, un codice deve avere distanza d con
d ≥ k+1
• Per correggere k errori, un codice deve avere distanza d con
d ≥ 2k+1
Es. sia 00000 la codifica di partenza e 10100 una non-codifica con k = 2
errori, la codifica associata con distanza minima è proprio 00000, invece
avendo la non-codifica 11100 (codifica 00000 con 3 errori) non posso risalire
alla codifica perché correggendo troverei 11111
Daniela Fogli – Elementi di Informatica e Programmazione
11
Daniela Fogli – Elementi di Informatica e Programmazione
12
Codice di parità
Esercizio
Esempio di codice rilevatore: il codice di parità
Per codificare i tre simboli D, F, I si utilizza il seguente codice a 5 bit:
Dato un codice: si aggiunge un bit in modo che il numero
di 1 sia pari (parità pari) [o dispari (parità dispari)]
Esempio
1
Codice ASCII a 7 bit
0011100
D
00000
F
11100
I
10011
Errori di trasmissione possono dar luogo alla modifica di uno o più bit.
a) Quanti errori è in grado di rivelare il codice in generale?
Bit di parità (codice a parità pari)
b) E quanti errori è in grado di correggere?
d = 2 (a partire da una codifica con un numero pari di 1 è
necessario modificare almeno 2 bit per ottenere una sequenza che
a sua volta abbia un numero pari di 1, ovvero che sia una codifica)
⇒ può rivelare un errore, correggerne nessuno
Daniela Fogli – Elementi di Informatica e Programmazione
13
Soluzione
Daniela Fogli – Elementi di Informatica e Programmazione
14
Esercizio
d12 = 3
Si consideri il codice a tre valori originari
d23 = 4
‘1’ codificato con 000000
d13 = 3
‘2’ codificato con 000001
la distanza del codice è pari a 3
‘3’ codificato con 111111
a) Trovare quanti errori può correggere e rivelare in generale.
a) Errori rilevati:
b) Si supponga di ricevere la sequenza 001111.
Assumendo che possano essere stati compiuti al più 2 errori, è
possibile decodificare correttamente la sequenza?
Come si giustifica la risposta in relazione al risultato
trovato nel punto a)?
d ≥ k+1 quindi kmax = 2 (possono essere rivelati 2 errori)
b) Errori corretti:
d ≥ 2k+1 quindi kmax = (3-1)/2=1
(può essere corretto 1 errore)
Daniela Fogli – Elementi di Informatica e Programmazione
15
Daniela Fogli – Elementi di Informatica e Programmazione
16
Soluzione (a)
Soluzione (b)
b) Ricevo 001111, mentre avevo:
a) Risulta:
d12 = 1
d23 = 5
‘1’ d13 = 6
‘2’ 000001
dist2 = 3
001111
⇒ il codice non può (in generale) rivelare né tanto meno
correggere alcun errore [errori rilevati: d ≥ k+1, quindi
con k=1 serve d ≥ 2]
‘3’ 111111
dist3 = 2
001111
In questo caso posso decodificare 001111 con il valore “3”.
Se sono stati commessi al più due errori, sono sicuro che la
decodifica è corretta, perché:
[000000 non può essere modificato in 001111]
dist1 = 4 > 2
dist2 = 3 > 2
17
Perchè?
[000001 non può essere modificato in 001111]
Daniela Fogli – Elementi di Informatica e Programmazione
18
Tipologie di codici
Come mai posso correggere due errori anche se
(cfr. punto a) il codice ha distanza 1?
Nel seguito vedremo tipologie di rappresentazioni
diverse:
La distanza del codice si riferisce al “caso peggiore”
(distanza minima) ⇒ le relative formule garantiscono le
proprietà del codice di rivelazione e correzione di errori
in ogni caso, ovvero per qualunque simbolo
rappresentato e per qualunque posizione degli errori
Senza assumere limitazioni sul numero di bit a disposizione:
per numeri [notazione binaria, ovvero posizionale con base 2]
Disponendo di un numero di bit limitato:
numeri naturali
interi relativi [valore assoluto e segno, compl. a 1, compl. a 2]
“reali” [virgola fissa e virgola mobile]
valori logici, caratteri alfabetici, testi
suoni, immagini e sequenze video
codici per la rivelazione e correzione di errori
Per esempio, nel caso venga trasmesso ‘1’ (codificato
con 000000), è sufficiente un errore sull’ultimo bit per
ottenere 000001, che è pari alla codifica di ‘2’: in tal
caso l’errore non verrebbe neppure rivelato!
Daniela Fogli – Elementi di Informatica e Programmazione
dist1 = 4
001111
quindi la distanza del codice è 1
Daniela Fogli – Elementi di Informatica e Programmazione
000000
Codici di compressione (senza | con perdita)
19
Daniela Fogli – Elementi di Informatica e Programmazione
20
La compressione dei dati
Concetti fondamentali
Cambiando modalità di codifica è possibile ridurre il numero dei
bit richiesti
Vantaggi per memorizzazione e trasmissione
Per qualunque tecnica di compressione: data una
sequenza di bit S
Denotiamo con |S| il numero dei bit della sequenza
funzione di compressione Fc t.c. |Fc(S)| < |S|
rapporto di compressione |S|/|Fc(S)| (NB: > 1)
funzione di decompressione Fd per ricostruire la successione
originaria: Fd(Fc(S))
Esempio:
rappresentare una sequenza di 1 milione di caratteri, ognuno
appartenente all’insieme {A, C, G, T}
se uso 4 configurazioni a 2 bit ho bisogno di 2 milioni di bit
ma se so che la frequenza dei caratteri all’interno della sequenza varia
(es. 50% A, 25% C, 12.5% G e T) allora posso usare una codifica
diversa: A = 0, C = 10, G = 110 e T = 111
Num. bit complessivi = (1x50%+2x25%+3x12.5%+3x12.5%) x 1
milione = 1.75 milioni
Ho ridotto il numero di bit senza perdere informazione
Daniela Fogli – Elementi di Informatica e Programmazione
Due tipi di compressione dei dati:
senza perdita (lossless)
è garantito che Fd(Fc(S)) = S, ovvero Fd=Fc-1
con perdita (lossy)
(perdita di informazione)
in generale Fd(Fc(S)) ≠ S
21
22
Algoritmi di compressione dati con perdita
Algoritmi di compressione dati senza perdita
Si adottano quando non si può perdere informazione, es. programmi
in formato eseguibile, file doc
Svantaggio: ridotto rapporto di compressione
Principio fondamentale: sottosequenze di bit frequenti sostituite con
codici opportuni
Esempi:
Si applicano a dati che hanno origine nel mondo analogico (suoni,
immagini, sequenze video, ecc.)
Si adottano quando si è disposti a perdere una parte
dell’informazione durante la compressione: compromesso
qualità/rapporto di compressione
Tecniche dipendenti dalla natura del segnale considerato:
formati ZIP e RAR (con un apposito programma di utilità - es. winzip si può creare un archivio in cui i file vengono memorizzati in formato
compresso)
formato GIF (per le immagini raster): utilizzo di un “dizionario” con le
configurazioni di valori che si ripetono
Daniela Fogli – Elementi di Informatica e Programmazione
Daniela Fogli – Elementi di Informatica e Programmazione
per i suoni, variazioni di volume e frequenza al di sotto di una certa
soglia non sono percepite dall’orecchio umano; inoltre i suoni a basso
volume sovrapposti a suoni di volume maggiore sono poco udibili
(formato compresso MP3)
per le immagini, lievi cambiamenti di colore in punti contigui non sono
percepiti dall’occhio umano (formato JPEG)
nelle animazioni video, immagini successive hanno spesso molte parti
uguali e si possono codificare solo le differenze (formato MPEG)
23
Daniela Fogli – Elementi di Informatica e Programmazione
24
Scarica

3-La codifica dell`informazione parte 1