Upload
vunhu
View
216
Download
0
Embed Size (px)
Citation preview
Elementi di Informatica e Programmazione
La Codifica dell’informazione(parte 1)
Corsi di Laurea in:
Ingegneria CivileIngegneria per l’Ambiente e il Territorio
Università degli Studi di Brescia
Docente: Daniela Fogli
Daniela Fogli – Elementi di Informatica e Programmazione 22
Premessa
Nella prima lezione è stato presentato il concetto astratto di
calcolatore: non com’è fatto o come funziona, ma che cos’è in sé
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
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
Daniela Fogli – Elementi di Informatica e Programmazione 33
Architettura di Von Neumann
NOTE: CPU = Central Processing
Unit (Unità centrale) detta oggi
Microprocessore o processore
CPU
Memoria
Dispositivi
di I/O
Bus di sistema
ambiente
Daniela Fogli – Elementi di Informatica e Programmazione 44
Funzionamento dell’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 sequenziale1. Reperimento dell’istruzione da eseguire
2. Interpretazione dell’istruzione
3. Esecuzione dell’istruzione
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
Daniela Fogli – Elementi di Informatica e Programmazione 55
Programma e dati in memoria
zona della
memoria che
contiene le
istruzioni
zona della
memoria che
contiene i dati
zona “libera”
MEMORIA
In memoria
viene caricata la
forma binaria
del programma
01010111100110011101011110011111011100000001100111010111000111010110011110011001
0101000111011000101001111001100101011111100000000101010010011001
011100000001100101010001110110000101111110000000
0
1…
NB: non distinguibili in sé, è il
“programma” che ne stabilisce
il significato …
Indirizzo
Daniela Fogli – Elementi di Informatica e Programmazione 66
Bus
Insieme di collegamenti (linee) che permettono di trasferire dati da più sorgenti a più destinazioni (componenti del calcolatore)
Il bus può essere suddiviso funzionalmente in:Bus dati (trasferisce i dati scambiati tra componenti)
Bus indirizzi (trasferisce gli indirizzi della memoria odelle interfacce di ingresso-uscita coinvolte nel trasferimento)
Bus comandi o “di controllo” (trasferisce segnali di controllo che regolano le operazioni del sistema di elaborazione)
… fine della premessa …
Daniela Fogli – Elementi di Informatica e Programmazione 77
...
Programmi, dati, risultati, indirizzi sono informazioni … Ora vediamo come si RAPPRESENTANO nel calcolatore
Daniela Fogli – Elementi di Informatica e Programmazione 88
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
Un brano musicale
Il CD in cui è memorizzato
L’aria attraverso cui viene
trasmesso
…
Daniela Fogli – Elementi di Informatica e Programmazione 99
Proprietà di un supporto
Il supporto deve poter assumere configurazioni differentialtrimenti non è in grado di portare informazione
Ad ogni configurazione viene associata una differente entità di informazione
Il caso più semplice: 2 configurazioni possibili
Esempi: interruttore acceso/spento, tensione sì/no, circuito aperto/chiuso
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 1010
Codice
Successione di
simboli
Entità di
informazione
Attività di
interpretazione
E’ necessario un codice:
un insieme di regole che stabiliscono le associazioni fra configurazioni e entità di informazione
Daniela Fogli – Elementi di Informatica e Programmazione 1111
Esempio di codice
Attraverso il codice si attribuisce un significato
convenzionale a ciascuna configurazione che il supporto
può assumere
ES., 2 dadi⇒ lettera A
⇒ lettera B
….
• •
••
•
Daniela Fogli – Elementi di Informatica e Programmazione 1212
Codifica = operazione con cui l’informazione viene scritta (su un supporto fisico)
Decodifica = operazione con cui l’informazione viene letta (da un supporto fisico)
10
Informazione
Supporto
fisico
Il numero “dieci”codifica
decodifica
Codifica e Decodifica
Daniela Fogli – Elementi di Informatica e Programmazione 1313
Codifica dei dati e delle istruzioni
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 1414
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: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
Daniela Fogli – Elementi di Informatica e Programmazione 1515
Bit, Byte, KiloByte, MegaByte,...
Bit = ‘0’ oppure ‘1’
Byte = 8 bit = 23
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) = 250 byte = …
ExaByte (EB) = 260 byte = …
Daniela Fogli – Elementi di Informatica e Programmazione 1616
Il problema della rappresentazione
Ho n oggetti da codificare e 2 soli simboli, quanto è la lunghezza kdelle sequenze di simboli?
Oppure: dispongo di sequenze di lunghezza k di simboli 0 e 1, quanto è il numero n di oggetti che posso codificare?
Insieme di “oggetti”
che vogliamo
rappresentare
Insieme di simboli
disponibili nel
calcolatore = {0, 1}
Problema:assegnare un codice univoco a tutti gli oggetti compresi in un insieme
Daniela Fogli – Elementi di Informatica e Programmazione 1717
Codice binario a n bit
dominio
O1
O2
codominio
110
011
111
001
O3 101
insieme delle
codifiche
000
010
100
• Funzione:- dominio (insieme di oggetti da rappresentare)- codominio: insieme di tutte le possibili sequenze di n bit
• Funzione biunivoca tra il dominio e la sua immagine,detta insieme delle codifiche
• Esempio di codice binario a 3 bit:
Daniela Fogli – Elementi di Informatica e Programmazione 1818
Codifica binaria
Se k = 1Posso codificare due oggetti (n=2): al primo assegno il codice ‘0’ e al secondo assegno il codice ‘1’
Se k = 2Posso codificare n=4 oggetti: 00, 01, 10, 11
Se k = 3Posso codificare n=8 oggetti: 000, 001, 010, 011, 100, 101, 110, 111
Qual è la regola???? (Ipotesi implicita: i codici hanno tutti la stessa lunghezza)
Daniela Fogli – Elementi di Informatica e Programmazione 1919
n = 2k k = log2n
Se ho a disposizione sequenze di k = 5 bit, quanti
elementi posso codificare? n = 25 = 32 elementi
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 2020
Gennaio Febbraio
Marzo Aprile
Maggio Giugno
Luglio Agosto
Settembre Ottobre
Novembre Dicembre
Gennaio Febbraio
Marzo Aprile
Maggio Giugno
Luglio Agosto
Settembre Ottobre
Novembre Dicembre
0
1
1 bit ���� 2 gruppi
Gennaio Febbraio
Marzo Aprile
Maggio Giugno
Luglio Agosto
Settembre Ottobre
Novembre Dicembre
0100
1110
2 bit ���� 4 gruppi
4 bit ���� 16 gruppi… mancano 4
configurazioni!
Gennaio 0000 Febbraio 0100
Marzo 0010 Aprile 0110
Maggio 0011 Giugno 0111
Luglio 1000 Agosto 1100
Settembre 1010 Ottobre 1110
Novembre 1011 Dicembre 11113 bit ���� 8 gruppi
Gennaio 000 Febbraio 010
Marzo 001 Aprile 011Maggio Giugno
Luglio 100 Agosto 110
Settembre 101 Ottobre 111Novembre Dicembre
Esempio: i mesi dell’anno
Daniela Fogli – Elementi di Informatica e Programmazione 2121
Codifica binaria Cifra
decimale
rappresentata b3 b2 b1 b0
0 0 0 0 0
1 0 0 0 1
2 0 0 1 0
3 0 0 1 1
4 0 1 0 0
5 0 1 0 1
6 0 1 1 0
7 0 1 1 1
8 1 0 0 0
9 1 0 0 1
1 0 1 0
1 0 1 1
1 1 0 0
1 1 0 1
1 1 1 0
1 1 1 1
codifiche
non usate
Esempio: codifica BCD
Daniela Fogli – Elementi di Informatica e Programmazione 2222
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
Codici di compressione (senza | con perdita)
Daniela Fogli – Elementi di Informatica e Programmazione 2323
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
Codici di compressione (senza | con perdita)
Daniela Fogli – Elementi di Informatica e Programmazione 2424
Sistema di numerazione posizionale
Ad ogni cifra del numero è attribuito un peso a seconda della sua posizione all’interno del numero
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
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
Daniela Fogli – Elementi di Informatica e Programmazione 2525
Le basi più comuni
Se la base è b, allora le cifre che possono essere
utilizzate per comporre un numero vanno
da 0 a b-1
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]
Daniela Fogli – Elementi di Informatica e Programmazione 2626
Base = 2 Cifre: 0, 1
Numeri espressi nella forma
(an an-1 … a1 a0 . a-1 a-2 …)due [ai ∈ {0,1}]
il cui “valore” è
(an*2n + an-1*2
n-1 + … + a0*20 + a-1 * 2-1 + a-2 *2-2 …)
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
Notazione Binaria
Daniela Fogli – Elementi di Informatica e Programmazione 2727
Conversione binario ⇒⇒⇒⇒ decimale
Come visto, la conversione si ottiene direttamente dalladefinizione stessa di numero binario
Scriviamo i numeri denotando la base attraverso il pedice: es. 1101.1dueE’ facile convertirlo in un numero decimale facendo:
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 2828
Domande
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
Daniela Fogli – Elementi di Informatica e Programmazione 2929
Conversione decimale ⇒⇒⇒⇒ binario
Usare lo stesso metodo visto prima è complesso!
Esempio:
345dieci = 11x101010 + 100x101001 + 101x10100 = …
… e poi bisogna fare le moltiplicazioni e l’elevamento a potenza in base 2 e sommarne i risultati in base 2
2dieci10dieci3dieci
Useremo un “metodo pratico”
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 3030
Conversione decimale ⇒⇒⇒⇒ binariometodo pratico
Regola pratica per convertire la parte intera
Si noti che:
ckck-1ck-2…c0 si può scrivere anche come ckck-1ck-2c1xb+c0
Ad esempio:
3256 = 325x10 + 6 (in base b = dieci)
325 = 32x10 + 5
32 = 3x10 + 2
3=0x10 + 3
In pratica, per “isolare” le cifre del numero, basta fare una serie
di divisioni per la base e tenere il resto
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 3131
Conversione decimale ⇒⇒⇒⇒ binariometodo 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)
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
Daniela Fogli – Elementi di Informatica e Programmazione 3232
Esempio di conversione da decimale a binario
137dieci = ?due
137 div 2 = 68 & 137 mod 2 = 1
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
Risultato = 10001001due
Esercizio: riconvertire il risultato in decimale
Si legge dal
basso verso
l’alto !!!
Daniela Fogli – Elementi di Informatica e Programmazione 3333
Errore Tipico (1)
81 140 020 010 05 12 01 10
otterrei 1000101 che vale 69!
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 ) !
E’ un errore considerare la prima cifra
ottenuta come la più significativa
Daniela Fogli – Elementi di Informatica e Programmazione 3434
Errore Tipico (2)
88 0
44 0
22 0
11 1
5 1
2 0
1
otterrei 011000 (24) anziché 1011000 (64+24)
NB: se si è colti dal dubbio, ricordare che la prima cifra
significativa in questo caso vale sempre 1
E’ un errore fermarsi quando si ottiene
1 come dividendo
Daniela Fogli – Elementi di Informatica e Programmazione 3535
Regola pratica per convertire la parte frazionaria
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
....
Es. con b = 10, sia F=.53.531 x 10 = 5 + .31 la parte intera è 5
.31 x 10 = 3 + .1 la parte intera è 3
.1 x 10 = 1 la parte intera è 1
Ma a noi interessa che la base di arrivo sia la base 2 …
Le 3 cifre che costituiscono il numero
Daniela Fogli – Elementi di Informatica e Programmazione 3636
Conversione da decimale a binario della parte frazionaria
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?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
….
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
Daniela Fogli – Elementi di Informatica e Programmazione 3737
Esempio: convertire 43.687dieci in binario
43
21
10
5
2
1
0
1
1
0
1
0
1
.687 x 2 � p.i. 1
.374 x 2 � p.i. 0
.748 x 2 � p.i. 1
.496 x 2 � p.i. 0
.992 x 2 � p.i. 1
.984 …
43.687dieci = 101011.10101due(fermandosi al quinto bit per la parte frazionaria)
Daniela Fogli – Elementi di Informatica e Programmazione 3838
Operazioni aritmetiche
Operazioni +, -, *, / su numeri in base 2
Valgono le stesse regole e proprietà delle operazioni in base 10
Daniela Fogli – Elementi di Informatica e Programmazione 3939
Aritmetica binaria: addizione
+ 0 1
0 0 1
1 1 (1) 0
Riporto: 1 + 1 = 2dieci = 10due
Esempio:
1 1 0 + 6
1 0 = 2
_________
1 0 0 0
Daniela Fogli – Elementi di Informatica e Programmazione 4040
Aritmetica binaria: sottrazione
- 0 1
0 0 (1) 1
1 1 0
Prestito (borrow): 102 – 12 (= 210 – 110) = 012
Esempio:
1 1 1 0 – 14
1 1 = 3
_________
1 0 1 1 11
Daniela Fogli – Elementi di Informatica e Programmazione 4141
Aritmetica binaria: moltiplicazione
* 0 1
0 0 0
1 0 1
Esempio:
1 1 1 0 1 0 * 58
1 0 1 1 = 11 ______
1 1 1 0 1 0
1 1 1 0 1 0
0 0 0 0 0 0
1 1 1 0 1 0 _______________________________________
1 0 0 1 1 1 1 1 1 0 638
Daniela Fogli – Elementi di Informatica e Programmazione 4242
Altri esempi di operazioni aritmetiche in base 2
1 0 1 1 +
0 1 1 1 =
__________
1 0 0 1 0
addizione
1 1 0 0 -
0 0 1 1 =
__________
1 0 0 1
sottrazione1 1 0 1 ×
1 0 1 1 =
_______
1 1 0 1 +
1 1 0 1 +
0 0 0 0 +
1 1 0 1 +
_____________
1 0 0 0 1 1 1 1
moltiplicazione
Esercizio: controllare se i risultati sono corretti convertendo in decimale
Daniela Fogli – Elementi di Informatica e Programmazione 4343
Numeri in base 8 (ottali)
Le cifre: [0, 1, 2, 3, 4, 5, 6, 7]
17otto = ?dieci
1otto = 1dieci 7otto = 7dieci
17otto = (1 x 81 + 7 x 80)dieci = (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 4444
Numeri in base 16 (esadecimali)
Le cifre: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F]
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
FAsedici = ?dieci
Fsedici = 15dieciAsedici = 10dieci
FAsedici = (15 x 161 + 10 x 160)dieci = (240 + 10)dieci = 250dieci
Daniela Fogli – Elementi di Informatica e Programmazione 4545
I primi 16 numeri in base 10, 2, 8, e 16
Sistema di numerazione
decimale binario ottale esadecimale
0 0000 0 0
1 0001 1 1
2 0010 2 2
3 0011 3 3
4 0100 4 4
5 0101 5 5
6 0110 6 6
7 0111 7 7
8 1000 10 8
9 1001 11 9
10 1010 12 A
11 1011 13 B
12 1100 14 C
13 1101 15 D
14 1110 16 E
15 1111 17 F
Daniela Fogli – Elementi di Informatica e Programmazione 4646
Perché le basi 2, 8 e 16?
La rappresentazione binaria ha motivazioni di tipo 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
Daniela Fogli – Elementi di Informatica e Programmazione 4747
Conversione binario ⇒⇒⇒⇒ ottale
Tabella di conversione
000due 0otto
001due 1otto
010 due 2otto
011due 3otto
100due 4otto
101due 5otto
110due 6otto
111due 7otto
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 4848
Conversione binario ⇒⇒⇒⇒ esadecimale
Tabella di conversione
0000due 0sedici
0001due 1sedici
0010due 2sedici
0011due 3sedici
0100due 4sedici
0101due 5sedici
0110due 6sedici
0111due 7sedici
1000due 8sedici
1001due 9sedici
1010due Asedici
1011due Bsedici
1100due Csedici
1101due Dsedici
1110due Esedici
1111due 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 4949
Convertire in notazione ottale il numero binario 10111010.11
10111010.11
5 6 2 . 3
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:
xxx xxx . yyy yyy …
Errore Tipico
Daniela Fogli – Elementi di Informatica e Programmazione 5050
L’esercizio quindi va risolto così:
1 0 1 1 1 0 1 0 . 1 1 0 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
Esecuzione corretta
Daniela Fogli – Elementi di Informatica e Programmazione 5151
Convertire in binario il numero in notazione ottale 135.18
1 3 5.18 0 0 1 0 1 1 1 0 1 . 001
ERRORE TIPICO: CONVERTIRE IN
001 011 101 . 1
infatti 0.18 = 1/8 = 0.125 mentre 0.12 = 1/2 = 0.5
Un altro esempio
Daniela Fogli – Elementi di Informatica e Programmazione 5252
0 1 1 1 0 1 0 . 1 3 A . 816
E 3 . 716 1 1 1 0 0 0 1 1 . 0 1 1 1
ATTENZIONE!!! PARTIRE SEMPRE DAL PUNTO DI RADICE!!!
xxxx . xxxx xxxx
Esempi di conversione esadecimale-binario
1)
2)
Daniela Fogli – Elementi di Informatica e Programmazione 5353
Esercizio (in aula)
Dato il numero binario 001010110111due convertirlo in
un numero ottale e poi in un numero esadecimale
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 5454
Esercizio (in aula)
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
Daniela Fogli – Elementi di Informatica e Programmazione 5555
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
Elementi di Informatica e Programmazione
La Codifica dell’informazione(parte 2)
Corsi di Laurea in:
Ingegneria CivileIngegneria per l’Ambiente e il Territorio
Università degli Studi di Brescia
Docente: Daniela Fogli
Daniela Fogli – Elementi di Informatica e Programmazione 22
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
Codici di compressione (senza | con perdita)
Tipologie di codici
Daniela Fogli – Elementi di Informatica e Programmazione 33
I numeri naturali si rappresentano normalmente, ma con n cifre binarie possiamo rappresentare solo i numeri da 0 a Nmax
Esempio: con 8 cifre (n=8)
000000000
110000000
12711111110
Nmax = 25511111111
…
…
Codifica dei numeri naturali
Daniela Fogli – Elementi di Informatica e Programmazione 44
Con n cifre binarie si possono rappresentare i numeri da 0 a 2n-1
Esempio precedente
Nmax = 2n-1 = 256-1 =25511111111
n = 8
Nota
Daniela Fogli – Elementi di Informatica e Programmazione 55
Voglio rappresentare i numeri naturali da 0 a Nmax.
Di quante cifre binarie ho bisogno?
Esempio
Voglio rappresentare numeri da 0 a 350…
con n = 7 Nmax = 127
con n = 8 Nmax = 255
con n = 9 Nmax = 511
n = 9
Viceversa
Daniela Fogli – Elementi di Informatica e Programmazione 66
Per poter rappresentare numeri naturali fino a N ≥≥≥≥ 0, serve un numero di cifre n tali che:
Nmax ≥≥≥≥ N ovvero (2n – 1) ≥≥≥≥ N
Quindi deve essere
n ≥≥≥≥ log2(N + 1)
Esempio precedente
N = 350
n ≥ log2(351) = 8,….
quindi n ≥ 9
In generale …
Daniela Fogli – Elementi di Informatica e Programmazione 77
Operazioni aritmetiche
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
1 1 1 0 + 14
0 0 1 0 = 2
_________
(1) 0 0 0 0 0?
Nel caso di sottrazione, un prestito dal bit più significativo indica
un risultato negativo (non rappresentabile)
1 1 0 0 – 12
1 1 0 1 = 13
__________
(1) 1 1 1 1 15?
Daniela Fogli – Elementi di Informatica e Programmazione 88
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
Codici di compressione (senza | con perdita)
Daniela Fogli – Elementi di Informatica e Programmazione 99
Codifica in valore assoluto e segno
Il modo più semplice: indicare il segno seguito dal valore assoluto
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
Esempio: n = 8 (8 bit a disposizione)
Rappresentazione di -11
11010001
segno - 11
Daniela Fogli – Elementi di Informatica e Programmazione 1010
Codifica in valore assoluto e segno con 4 bit
1000 -0
1001 -1
1010 -2
1011 -3
1100 -4
1101 -5
1110 -6
1111 -7
0000 +0
0001 +1
0010 +2
0011 +3
0100 +4
0101 +5
0110 +6
0111 +7
Numeri positivi Numeri negativi
Daniela Fogli – Elementi di Informatica e Programmazione 1111
Due note importanti
Esistono due codifiche per il valore 0
0 0 0 0 0 0 0 0 0+
1 0 0 0 0 0 0 0 0-
I valori rappresentabili vanno:
da - (2n-1 - 1) a + (2n-1 - 1)
segno * * * * * * *
n-1 bit: da 0 a 2n-1
- 1
Daniela Fogli – Elementi di Informatica e Programmazione 1212
Che problemi ha questa codifica?
Questa tecnica non viene usata nel calcolatore
Difficoltà nel fare le operazioni aritmetiche (es. la sottrazione)
Es. 1 (sottrazione di numeri entrambi positivi)
11011000 -
11010100
a:
b:
Dato che |b|>|a|, il segno del risultato è negativo, il valore assoluto è
0101011 -0011011=0010000
00001001a-b:
|b||a|
27
43
-16
Daniela Fogli – Elementi di Informatica e Programmazione 1313
Es. 2: Sottrazione di numeri entrambi positivi ma con |a|>|b|
Dato che |a|>|b|, il segno del risultato è positivo, il valore assoluto
è
Un altro esempio
11011100 -
11010100
a:
b:
59
43
0111011-0101011=0010000
|a|
|b|
00001000a-b: +16
Daniela Fogli – Elementi di Informatica e Programmazione 1414
In generale
Segno a Segno b segno(a-b) |a-b|
+ + |a| >|b| + a - b
+ + |b|>|a| - b - a
- + - |a| + b
+ - + a + |b|
- - |a| > |b| - |a| - |b|
- - |b| > |a| + |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 …
Daniela Fogli – Elementi di Informatica e Programmazione 1515
Codifica in complemento a 1
Si ottiene facendo il complemento di tutti i bit (ovvero si sostituiscono gli 0 con 1 e gli 1 con 0)
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 1616
Esempi
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
Daniela Fogli – Elementi di Informatica e Programmazione 1717
Operazioni aritmetiche
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 01100110 +102dieci
Somma più semplice ma con il problema di sommare il riporto …
Risultato OK Risultato ERRATO! (overflow)
Daniela Fogli – Elementi di Informatica e Programmazione 1818
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
Esempi (con n = 4):
+6dieci = 0110 (rappresentato normalmente)
- 6dieci ⇒ 24 - 6 = 10 ⇒ -6dieci = 1010c2
+3dieci ⇒ 0011 (rappresentato normalmente)
- 3dieci ⇒ 24 - 3 = 13 ⇒ -3dieci = 1101c2
E’ complicato?
Daniela Fogli – Elementi di Informatica e Programmazione 1919
1000 -8
1001 -7
1010 -6
1011 -5
1100 -4
1101 -3
1110 -2
1111 -1
0000 0
0001 1
0010 2
0011 3
0100 4
0101 5
0110 6
0111 7
Numeri positivi Numeri negativi
Unica rappresentazione del numero zero
Bit di
segno
Bit di
segno
Codifica in complemento a 2 con n=4 bit
NB: i numeri rappresentabili vanno da -2n-1 (-8) a +(2n-1 -1) (+7)
Daniela Fogli – Elementi di Informatica e Programmazione 2020
Due metodi pratici
Esistono due metodi pratici equivalenti per calcolare il complemento a due di un numero x
Metodo 1:1. Effettuare il complemento a 1 di x2. 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
NB: il Metodo 1 è quello utilizzato nei dispositivi elettronici
Daniela Fogli – Elementi di Informatica e Programmazione 2121
Esempio di uso del metodo 1
Dato +6dieci codificato su 4 bit ⇒ 0110
Facendo il complemento a 1 si ottiene 1001
Sommando 1 al risultato si ottiene…
1 0 0 1 +
1 =
1 0 1 0
Daniela Fogli – Elementi di Informatica e Programmazione 2222
Esempio di uso dell’algoritmo 2
Dato +6dieci codificato su 4 bit ⇒ 0110
rimane invariato
rimane invariato
viene invertito
viene invertito
1 0 1 0
Risultato
1 0 1 0
Daniela Fogli – Elementi di Informatica e Programmazione 2323
Altro esempio
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
Usando il secondo metodo:
01111 ⇒ lascio invariato il primo 1 a destra e complemento tutti gli altri ⇒ 10001
Daniela Fogli – Elementi di Informatica e Programmazione 2424
ERRORE TIPICO: dimenticarsi che la rappresentazione in C.a 2 è relativa ad
un numero di bit fissati!!!
Es. Rappresentare in C. a 2 con 8 bit il numero decimale –3.
3dieci = 11due quindi –3dieci = 01due
ma questo risulta un numero positivo!!!
Errore Tipico
Svolgimento corretto:
3dieci = 00000011due
-3dieci = 11111101
Daniela Fogli – Elementi di Informatica e Programmazione 2525
01111111
10000000 11111111
0
+2+1
+2n-1 -1
–1–2
00000000
Numeri Numeri
positivipositivi
–2n-1
Numeri Numeri
negativinegativi
00000001
Rapp."normale“
C. A 2: 2n - N
Con n cifre si possono rappresentare 2n numeri.Metà per i positivi e metà per i negativi, come in figura
NB: i numeri rappresentabili vanno da -2n-1 a +(2n-1 -1)
1111111011111101 –3
00000010
10000001–(2n-1-1)
Una visione globale …
Daniela Fogli – Elementi di Informatica e Programmazione 2626
Intervalli di rappresentazione: esempio
Supponiamo di avere una codifica con n=16 bit
Rappresentazione in valore assoluto e segno: numeri compresi
fra –(215-1) e 215-1, ovvero fra –32767 e +32767… lo 0 ha due
rappresentazioni
Rappresentazione in complemento a 1: numeri compresi fra –(215-
1) e 215-1, ovvero fra –32767 e +32767… lo 0 ha due
rappresentazioni
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)
Daniela Fogli – Elementi di Informatica e Programmazione 2727
Conversione da numero binario in complemento a 2 a numero decimale
Si può usare la simmetria dell’operazione in compl. a 2
Esempio:
1000001due è un numero negativo, pari a – 0111111 = -63dieci
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 + c0x20
Esempio:
1 0 0 0 0 0 1due = (-1)x26 + 1x20 = - 64 +1 = - 63dieci
Daniela Fogli – Elementi di Informatica e Programmazione 2828
Altri esempi
10001 = -1x24 + 1x20 = -16 + 1 = -15dieci
1010 = -1x23 + 1x21 = -8 + 2 = -6dieci
10101010 = -1x27 + 1x25 + 1x23 + 1x21= -128 + 32 + 8
+ 2 = -86
Esercizio proposto:
ricavare il valore decimale col metodo della simmetria
Daniela Fogli – Elementi di Informatica e Programmazione 2929
Perché il complemento a 2?
I calcolatori usano la rappresentazione in complemento a 2
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 3030
Estensione del segno
Estendiamo il segno per rappresentare un numero su n=k + d bit anziché su n=k bit
1 0 0 0
1 0 0 01111
-8 su n = 4 bit
-8 su n = 8 bit
Daniela Fogli – Elementi di Informatica e Programmazione 3131
Somma di numeri in complemento a 2
(+5) 00000101
(+8) 00001000
(+13) 00001101
n = 8 bit, posso rappresentare i numeri da –27 a +27 - 1
(+5) 00000101
(-8) 11111000
(-3) 11111101
L’addizione di due numeri rappresentati in complemento a 2 dà un risultato corretto, trascurando il riporto, a patto che il risultato sia compreso entro l’intervallo dei numeri rappresentabili
Daniela Fogli – Elementi di Informatica e Programmazione 3232
Esempio di addizione
Usando n = 6 bit, l’intervallo dei numeri rappresentabili va da –25 a +25-1, ovvero da –32 a +31
Vogliamo calcolare 26 - 13
26 – 13 = 26 + (-13) = +13
0 1 1 0 1 0 + 26
1 1 0 0 1 1 = -13
1 0 0 1 1 0 1 +13
(13 = 0 0 1 1 0 1)
È nell’intervallo dei
numeri rappresentabiliIl riporto viene trascurato
Daniela Fogli – Elementi di Informatica e Programmazione 3333
Overflow
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 3434
Esempio di overflow
0 1 1 1 1 1 1 1 +
0 0 0 0 0 0 0 1 =
1 0 0 0 0 0 0 0
Il risultato ha segno negativo nonostante
gli addendi siano entrambi positivi
Bit di segno
+127
+1
-128
Daniela Fogli – Elementi di Informatica e Programmazione 3535
Se gli addendi hanno segno discorde non si ha mai overflow:
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!
0
MAX (+)
MIN (-)
N1
N2
Somma compresa tra N1 (positivo)
ed N2 (negativo), quindi sicuramente
rappresentabile!
Regola per la determinazione dell’overflow
Daniela Fogli – Elementi di Informatica e Programmazione 3636
Regola equivalente per l’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
n-2n-1 1 0
(ovvero: se c’è riporto generato in una posizione ma non nell’altra)
Daniela Fogli – Elementi di Informatica e Programmazione 3737
Esempio di overflow
Usando n = 6 bit, l’intervallo dei numeri rappresentabili va da –25 a +25-1, ovvero da –32 a +31
Vogliamo calcolare -25 - 13
-25 - 13 = -25 + (-13) = -38 � non è compreso nell’intervallo
1 0 0 1 1 1 + -25
1 1 0 0 1 1 = -13
1 0 1 1 0 1 0 +26
(25 = 0 1 1 0 0 1)
(13 = 0 0 1 1 0 1)
1 0
Generato un riporto solo nella posizione più
significativa
Daniela Fogli – Elementi di Informatica e Programmazione 3838
Esempio di “non” overflow
0 1 1 0 0 1 + 25
1 1 0 0 1 1 = -13
1 0 0 1 1 0 0 +12
(13 = 0 0 1 1 0 1)
1 1
25 - 13 = 25 + (-13) = 12 � è compreso nell’intervallo
Generato un riportoin entrambe le
posizionipiù significative
Daniela Fogli – Elementi di Informatica e Programmazione 3939
Esercizio d’esame (1)
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]
Soluzione
Conversione nella notazione binaria dei numeri (valori assoluti)
51 = 001100112 98 = 011000102
(32 + 16 + 2 + 1) (64 + 32 + 2)
Rappresentazione in complemento a due:
-51 = 11001101
-98 = 10011110
Daniela Fogli – Elementi di Informatica e Programmazione 4040
Soluzione (cont.)
Somma algebrica:
11001101 +
10011110 =
1 01101011
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
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.
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 4141
Esercizio d’esame (2)
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]
Soluzione
� Conversione nella notazione binaria dei numeri (valori assoluti)
54 = 001101102 44 = 001011002
(32+16+4+2) (32+8+4)
� Rappresentazione in complemento a due dei numeri (con 8 bit)
-54 = 11001010 -44 = 11010100
Daniela Fogli – Elementi di Informatica e Programmazione 4242
Soluzione (cont.)
� Somma algebrica:
11001010 +
11010100 =
1 10011110
e quindi il risultato è 10011110.
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
Daniela Fogli – Elementi di Informatica e Programmazione 4343
Dimenticarsi del numero di bit (8):
54 = 1101102 -54 = 001010
44 = 1011002 -44 = 010100
e sommando:
001010+
010100=
011110
risultato che non ha alcun senso!!!
(NB: in questo caso l’esercizio è valutato 0 punti!)
Un possibile errore
Daniela Fogli – Elementi di Informatica e Programmazione 4444
Esercizio d’esame (3)
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]
Soluzione
Rappresentazione in complemento a due con 8 bit:
96 = 01100000 69 = 01000101
Somma algebrica:
01100000+
01000101=
10100101
Daniela Fogli – Elementi di Informatica e Programmazione 4545
Soluzione (cont.)
Commento:
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!).
ERRORE TIPICO: complementare i due numeri che in realtà sono positivi
Daniela Fogli – Elementi di Informatica e Programmazione 4646
Esercizi
Dati i seguenti numeri decimali interi positivi:
55, 121, 16, 42
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
Daniela Fogli – Elementi di Informatica e Programmazione 4747
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
Elementi di Informatica e Programmazione
La Codifica dell’informazione(parte 3)
Corsi di Laurea in:
Ingegneria CivileIngegneria per l’Ambiente e il Territorio
Università degli Studi di Brescia
Docente: Daniela Fogli
Daniela Fogli – Elementi di Informatica e Programmazione 22
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
Codici di compressione (senza | con perdita)
Tipologie di codici
Daniela Fogli – Elementi di Informatica e Programmazione 33
Rappresentazione dei numeri reali
Per rappresentare numeri come1/3 = 0.33333333333….π = 3.141592653…
= 1.4142135…
servirebbe un numero di cifre illimitato
Nel calcolatore è possibile usare solo successioni di bit di lunghezza finita
Necessaria approssimazione
2
2 modalità
Rappresentazione in virgola fissa(non usata nei calcolatori)
Rappresentazione in virgola mobile
Daniela Fogli – Elementi di Informatica e Programmazione 44
Formato
In entrambi i casi, una rappresentazione è definita
mediante un formatoIl numero n di bit a disposizione
I campi in cui sono suddivisi i bitQuanti
In che ordine
Quanti bit per ciascun campo
Cosa rappresenta ciascun campo
Esempio di formato a 32 bit
1 8 23
S E M Vedremo poi il significato…
Daniela Fogli – Elementi di Informatica e Programmazione 55
Rappresentazione in virgola fissa
Esempio: n = 24 bit (3 byte)
Il numero più piccolo rappresentabile maggiore di 0 è:
Parte intera Parte decimale
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 (2-8)
2 byte (16 bit) 1 byte (8 bit)
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
Daniela Fogli – Elementi di Informatica e Programmazione 66
Altro esempio
Esempio: n = 32 bit
Es. 13.25dieci sarebbe rappresentato così
Valore massimo rappresentabile in questo formato?
Parte intera
16 bit
Parte frazionaria
16 bit
0151631
00000000000011010100000000000000
1111111111111111.1111111111111111
16 bit 16 bit
Daniela Fogli – Elementi di Informatica e Programmazione 77
Intervallo di rappresentazione: esempio
Nel formato precedente a 32 bit
- Parte intera: 216 – 1 = 65535
- Parte frazionaria:
0.1111111111111111 +
0.0000000000000001 =
1.0000000000000000
2-16
⇒ 1 - 2-16 = 0.9999847421 circa 1
NMAX = 65535.9999847421 circa 65536
Daniela Fogli – Elementi di Informatica e Programmazione 88
Intervallo di rappresentazione: in generale
Numero massimo rappresentabile NMAX
111……………………111 111……………………111
nI bit nF bit
Max parte intera: 2nI-1
Max parte frazionaria: 1 - 2-nF
se nF grande, 1 - 2-nF pari a circa 1
NMAX = (2nI-1) + (1 - 2-nF)se nF grande, NMAX pari a circa 2nI
Daniela Fogli – Elementi di Informatica e Programmazione 99
Granularità
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!
In generale: la granularità è fissa e pari a 2-nF
Per un qualsiasi numero rappresentabile I, il successivo è I + 2-nF
Dato un numero, rappresentato, qual è il successivo?
00000000000011010100000000000000
0.0000000000000001
00000000000011010100000000000001
Es.
Daniela Fogli – Elementi di Informatica e Programmazione 1010
Un inconveniente
Con la rappresentazione precedente, vogliamo rappresentare un numero “grande”, ad esempio 60.000
⇒ Molto meglio un campo più grande per la parte intera!
Vogliamo rappresentare un numero “piccolo”, ad esempio 2-15
⇒ Molto meglio un campo più grande per la parte frazionaria!
1110101001100000 0000000000000000
a cosa mi servono questi?
0000000000000010
a cosa mi servono questi?
0000000000000000
Daniela Fogli – Elementi di Informatica e Programmazione 1111
Alcuni esempi pratici
Massa dell’elettrone: 9 x 10-28 grammi0000000000000000000000000000000000.0000000000000000000000000009
Massa del sole: 2 x 1033 grammi2000000000000000000000000000000000.0000000000000000000000000000
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!
Si vuole un sistema di rappresentazione in cui l’intervallo dei numeri esprimibili sia indipendente dal numero di cifre significativeOvvero 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 1212
Notazione scientifica
Per semplicità, vediamola prima in base 10
Un numero in base 10 viene rappresentato come
m x 10 exp
Esempio: 159 300 000 = +1.593 x 108 dove m=+1.593 ed e=8
Esempio: -0.00001593 = -1.593 x 10-5 dove m= -1.593 ed e=-5
mantissa esponentebase
Daniela Fogli – Elementi di Informatica e Programmazione 1313
Il numero 101010000due può essere rappresentato come
1.0101 x 28
Altri esempi:
un numero molto grande come 101101011100000000000000000000000000000.000000
diventa 1011010111*229
un numero molto piccolo come 0.00000000000000000000000000000000000011011011
diventa 0.11011011*2-36
Notazione scientificaper numeri binari
base
esponente
mantissa
Daniela Fogli – Elementi di Informatica e Programmazione 1414
Nel calcolatore: Rappresentazione in virgola mobile
Dato un numero da rappresentare N:
N = ±mant*2esp
FORMATO
Si memorizzano segno, mantissa ed esponente
sM |mant| esp
nM bit nE bit
Esempio di formato:
Virgola mobile o Floating point
Daniela Fogli – Elementi di Informatica e Programmazione 1515
Problema
In questo modo la rappresentazione non è univoca:
0.1due = 1 * 2-1 �mant = 1 esp = -1
= 10 * 2-2 �mant = 10 esp = -2
= 0.1 * 20 �mant = 0.1 esp = 0
⇒ si stabilisce la “forma normalizzata” della mantissa
N = ±mant*2esp
Daniela Fogli – Elementi di Informatica e Programmazione 1616
Standard IEEE 754
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
32 bit per i numeri in precisione singola
64 bit per i numeri in precisione doppia
*Institute of Electrical and Electronic Engineering
1 bit segno, 8 bit esponente, 23 bit mantissa
1 bit segno, 11 bit esponente, 52 bit
mantissa
1 8 23
11 521
Daniela Fogli – Elementi di Informatica e Programmazione 1717
IEEE 754 Singola Precisione
1 8 23
S E M
Segno S: 0 segno + 1 segno -
N = 1.xxxxxxxxx * 2esp
Normalizzazione e mantissa
23 bit (M)
hidden bit
Rappresentazione dell’esponente
E = esp + 127
Rappresentazione in 8 bit a eccesso 127,
con le configurazioni 00000000 e 11111111
non ammesse (-126 ≤ esp ≤ 127)
Esempio: num= -3.5
Segno: 1
num = 11.1= 1.11 * 21
M = 1100…0
E = 1 +127 = 128= 10000000
11000000011000000000000000000000
Daniela Fogli – Elementi di Informatica e Programmazione 1818
Nota sulla rappresentazione dell’esponente
0
-127
+128 127
0
255
+127Numeri negativi
Numeri positivi
Daniela Fogli – Elementi di Informatica e Programmazione 1919
Esercizio d’esame (1)
Se il campo esponente di una codifica contiene il numero 00111011 qual è il valore decimale dell’esponente? [2 punti] Soluzione E = esp + 127 valori rappresentabili da –127 a +128 (NB: gli estremi non sono utilizzati propriamente) Nel caso specifico: E = 59 quindi esp = 59-127 = -68
Daniela Fogli – Elementi di Informatica e Programmazione 2020
Esercizio d’esame (2)
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 Segno: + Esponente: E = 27 = 128 esp = 128-127 = 1 Mantissa: mant = 1.1
⇒ N = 1.1due * 21 = 11due = 3dieci
Daniela Fogli – Elementi di Informatica e Programmazione 2121
Esercizio d’esame (3)
Rappresentare il numero decimale –4.5 secondo lo standard in virgola mobile IEEE 754 a 32 bit. [3 punti] Soluzione Segno: 1 Rapp. binaria: 4.5dieci = 100.1due Forma normalizzata: N = 1.001 * 22 Esponente: esp = 2 ⇒ E = 2+127 = 129dieci = 10000001
⇒ IEEE754: 1 10000001 00100000000000000000000
Daniela Fogli – Elementi di Informatica e Programmazione 2222
Normalizzazione
PASSAGGIO IMPORTANTE: normalizzazione
ESEMPIO 1
Rappresentazione binaria:
1001.01001 =
1.00101001 * 23 (forma normalizzata)
ESEMPIO 2 Rappresentazione binaria:
0.001011 =
1.011 * 2-3 (forma normalizzata)
Daniela Fogli – Elementi di Informatica e Programmazione 2323
L’insieme dei numeri in virgola mobile
non coincide con R
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
⇒ L’aritmetica “reale” del calcolatore è diversa da
quella classica
Daniela Fogli – Elementi di Informatica e Programmazione 2424
Esempio: IEEE 754 con singola precisione
MinExp = -126 MaxExp = +127 [estremi per scopi speciali] Numero più grande normalizzato: ± 1.11…12 * 2
127 ≈≈≈≈ 2*2127 = 2128 Numero più piccolo normalizzato: ± 1.00…02 * 2
-126 = 2-126
OVERFLOW - NORMALIZZATI - DENORM.- UNDERF. DENORM.+ NORMALIZZATI + OVERFLOW +
-∞∞∞∞ -2128 -2-126 -2-149 0 2-149 2-126 2128 +∞∞∞∞
NB: nel caso della virgola fissa, l’intervallo dei valori rappresentabilisarebbe 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 2525
E lo zero???
In generale lo zero non si potrebbe rappresentare
perché la mantissa è sempre 1.M …
Si usa un valore speciale dell’esponente (E = 0) e si
pone la mantissa a 0000….000
� questa rappresentazione significa “0”
Altri casi particolari di E (E=0 oppure E=255) per
rappresentare ±∞, risultati di operazioni non valide,
numeri denormalizzati
Daniela Fogli – Elementi di Informatica e Programmazione 2626
I problemi che nascono dalla natura digitale del calcolatore
I numeri nelle regioni (-∞, -2128), (-2-126, 0), (0, 2-126), (2128 , +∞) non possono essere rappresentati
Determiniamo quanti numeri possono essere rappresentati
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
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 2727
Esempio
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)
-∞∞∞∞ -2128 -2-126 0 2-126 2128 +∞∞∞∞
OVERFLOW - NORMALIZZATI - NORMALIZZATI + OVERFLOW +
1.0..00
1.0..00 x 299
La precisione è “concentrata” dove ce n’è bisogno!
Daniela Fogli – Elementi di Informatica e Programmazione 2828
Operazioni sui numeri “reali”
Addizione e sottrazione: si trasformano (con eventuale perdita di precisione) gli addendi in una rappresentazione con uguale esponente (il maggiore)si sommano (sottraggono) le mantissesi normalizza se necessario
Moltiplicazione:si sommano gli esponentisi moltiplicano le mantissesi normalizza se necessario
Divisione:si sottraggono gli esponentisi dividono le mantissesi normalizza se necessario
Daniela Fogli – Elementi di Informatica e Programmazione 2929
Esempio di addizione
Somma tra i seguenti due numeri rappresentati IEEE 754:
0 01111011 000…111 e 0 01111101 000…011
E = 123 (– 127 = -4) E = 125 (– 127 = -2)
Porto l’esponente del primo operando a -2:1.000…111 x 2-4 = 0.010…001 x 2-2
Nota: perdo le 2 cifre meno significative della mantissa
0.010…001 +
1.000…011 =
1.010…100
[ x 2-2]
[ x 2-2][ x 2-2] NB: risultato già normalizzato!
Sommo le mantisse:
Risulta quindi 0 01111101 010…100
NB: le cose sono leggermente più complicate, ma l’idea è questa …
Daniela Fogli – Elementi di Informatica e Programmazione 3030
Problemi con le operazioni
Addizioni e sottrazioni possono dare luogo a errori
Esempio: sottrazione fra due numeri quasi uguali
� può dar luogo al fenomeno della cancellazione(risultato = 0)
Divisione per numeri molto piccoli
� il risultato può cadere nell’intervallo di overflow(+ o -)
Daniela Fogli – Elementi di Informatica e Programmazione 3131
Fenomeno della cancellazione: esempio
Se ho la sottrazione
1.11100…0 x 2-126 -1.11000…0 x 2-126 =
0.00100…0 x 2-126
� che normalizzato diventerebbe 1.0…0 x 2-129 che viene dunque approssimato con 0, perché il minimo esponente esprimibile è -126
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 3232
Esercizi
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)
Ricavare il valore decimale dei seguenti numeri in virgola mobile
rappresentati secondo lo standard IEEE 754 a 32 bit:
0 10000100 00010001000000000000000
1 10000001 01010110000000000000000
Daniela Fogli – Elementi di Informatica e Programmazione 3333
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
Codici di compressione (senza | con perdita)
Tipologie di codici
Daniela Fogli – Elementi di Informatica e Programmazione 3434
Codifica binaria di valori logici
Valore logico: esprime il “valore di verità” di un determinato fatto
Esempi
- Il voto del mio compito di informatica A è sufficiente (F1)
- Una squadra di pallavolo in campo è costituita da 6 giocatori (F2)
Il fatto F1 è vero oppure falso, non entrambi (lo stesso per F2)
Daniela Fogli – Elementi di Informatica e Programmazione 3535
Algebra di Boole
E’ un particolare tipo di algebra che include: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 (‾)
Gli operatori soddisfano certe proprietà che si deducono da un
insieme di assiomi
E’ lo strumento matematico su cui si fonda il funzionamento dei
circuiti digitali
Daniela Fogli – Elementi di Informatica e Programmazione 3636
Variabili booleane
Una variabile booleana è una variabile binaria che
può assumere uno dei due valori logici denotati con 0 e
1 (oppure Falso e Vero)
Usiamo ad esempio i simboli x, y, z, … per indicare variabili booleane
Può essere x = 1 oppure x = 0
Daniela Fogli – Elementi di Informatica e Programmazione 3737
Operatori booleani e Tabelle di Verità
Operatori booleani (o logici) fondamentali:
NOT Negazione Logica not(x), x, ~xAND Prodotto Logico x and y, x • y, xyOR Somma Logica x or y, x + y
x1 x0 x1 •••• x0
0 0 0
0 1 0
1 0 0
1 1 1
x1 x0 x1 + x0
0 0 0
0 1 1
1 0 1
1 1 1
x x
0 1
1 0
AND OR
NOT
Daniela Fogli – Elementi di Informatica e Programmazione 3838
Assiomi dell’Algebra di Boole
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
Daniela Fogli – Elementi di Informatica e Programmazione 3939
Proprietà dell’Algebra di Boole
Forma AND 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 = 1
0 = 0
Daniela Fogli – Elementi di Informatica e Programmazione 4040
Formule (espressioni)booleane (logiche)
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
Daniela Fogli – Elementi di Informatica e Programmazione 4141
Esempi di formule booleane
((x+y)�z)
((x1�x2)+(x3�(x4+x5)))
Valgono le regole classiche di semplificazione delle parentesi e di
priorità degli operatori:
((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 4242
Equivalenza fra formule booleaneEsempi
x1x2 + x1x2x3 = x1 (x2+x2x3)
x1 + x2 + x2x3 + x2x3 = x1 + x2 + x3(x2+x2) = x1 + x2 + x3
x1x2 + x1x2x3 + x1x2 = x1x2 + x1x2x3 = x1x2 (1 +x3) = x1x2
Daniela Fogli – Elementi di Informatica e Programmazione 4343
Equivalenza fra formule booleaneVerifica tramite tabella
x1 + x2 + x2x3 + x2x3 = x1 + x2 + x3
x3 x2 x1 x2 x2x3 x2x3 x1+x2+x2x3+x2x3 x1+x2+x3
0 0 0 1 0 0 0 0
0 0 1 1 0 0 1 1
0 1 0 0 0 0 1 1
0 1 1 0 0 0 1 1
1 0 0 1 0 1 1 1
1 0 1 1 0 1 1 1
1 1 0 0 1 0 1 1
1 1 1 0 1 0 1 1
Daniela Fogli – Elementi di Informatica e Programmazione 4444
Tabelle di verità e proprietà dell’Algebra di Boole: Esempio
x y x+y x(x+y)
0 0 0 0
0 1 1 0
1 0 1 1
1 1 1 1
Assorbimento: x(x+y) = x
Daniela Fogli – Elementi di Informatica e Programmazione 4545
Tabelle di verità e proprietà dell’Algebra di Boole: Esempio (2)
x y x+y x(x+y)
F F F F
F V V F
V F V V
V V V V
Assorbimento: x(x +y) = x
NB: si può usare anche una diversa simbologia per i valori …
Daniela Fogli – Elementi di Informatica e Programmazione 4646
Tabelle di verità e proprietà dell’Algebra di Boole: Esempio (3)
x y x OR y x AND (x OR y)
F F F F
F V V F
V F V V
V V V V
Assorbimento: x AND (x OR y) = x
… o per gli operatori …
Daniela Fogli – Elementi di Informatica e Programmazione 4747
Tabelle di verità e proprietà dell’Algebra di Boole: Esempio
x y xy xy x y x + y
0 0 0 1 1 1 1
0 1 0 1 1 0 1
1 0 0 1 0 1 1
1 1 1 0 0 0 0
Proprietà di De Morgan: x y = x + y
Daniela Fogli – Elementi di Informatica e Programmazione 4848
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)
Usando gli assiomi e le proprietà dell’algebra di Boole dimostrare le seguenti equivalenze di formule booleane:
1. xyz + xyz + xyz + x = x2. x y + x y + x y = x + y
Daniela Fogli – Elementi di Informatica e Programmazione 4949
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
Codici di compressione (senza | con perdita)
Tipologie di codici
Daniela Fogli – Elementi di Informatica e Programmazione 5050
Codifica binaria dei caratteri
Quanti oggetti?10 cifre26 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)
Il codice ASCII utilizza 7 bit e quindi può rappresentare al massimo n = 27 = 128 caratteriCodice ASCII esteso: utilizza 8 bit e quindi codifica 256 caratteriCodice 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
Daniela Fogli – Elementi di Informatica e Programmazione 5151
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 (backspace) 40 28 050 ( 72 48 110 H 104 68 150 h
9 9 011 TAB (horizontal tab) 41 29 051 ) 73 49 111 I 105 69 151 i
10 A 012 LF (NL line feed, new line) 42 2A 052 * 74 4A 112 J 106 6A 152 j
11 B 013 VT (vertical tab) 43 2B 053 + 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
20 14 024 DC4 (device control 4) 52 34 064 4 84 54 124 T 116 74 164 t
21 15 025 NAK (negative acknowledge) 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
25 19 031 EM (end of medium) 57 39 071 9 89 59 131 Y 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 5252
Codifica binaria di testi
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 carattereil tipo o “font” (times new roman, arial, courier,…)l’ampiezza dei margini della pagina…
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 formattazionetesto 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
Daniela Fogli – Elementi di Informatica e Programmazione 5353
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
Elementi di Informatica e Programmazione
La Codifica dell’informazione(parte 4)
Corsi di Laurea in:
Ingegneria CivileIngegneria per l’Ambiente e il Territorio
Università degli Studi di Brescia
Docente: Daniela Fogli
Daniela Fogli – Elementi di Informatica e Programmazione 22
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
Codici di compressione (senza | con perdita)
Tipologie di codici
Daniela Fogli – Elementi di Informatica e Programmazione 33
Rappresentazione di informazioni multimediali
Con appositi metodi e codifiche si possono rappresentare informazioni complesse con sequenze di bit:
ImmaginiFilmatiSuoni
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
Daniela Fogli – Elementi di Informatica e Programmazione 44
• Voce
• Suoni
• Immagini
• Filmati
00100101000010010100
rappresentazione anche approssimata tramite
sequenze di bit
Informazione “continua”
Nel calcolatore
La digitalizzazione
Daniela Fogli – Elementi di Informatica e Programmazione 55
In cosa consiste la digitalizzazione?
Problema: codificare tramite una sequenza di bit una 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à:
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, adintervalli (nel tempo o nello spazio) costanti
Daniela Fogli – Elementi di Informatica e Programmazione 66
Codifica di un suono…
… in una sequenza di bit attraverso
campionamento (nel tempo) e
quantizzazione (in ampiezza)
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
Il numero di bit necessari per
codificare ogni valore è il parametro
che qualifica la quantizzazione - Es. con
8 bit posso codificare 256 valori diversi
Per ciascun intervallo di tempo viene scelto
l’istante di campionamento ti in cui viene rilevato
il valore della grandezza
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 77
Rappresentazione dei suoni nei CD audio
Segnali audio:
onde analogiche � campionamento + quantizzazione� valori digitali
Frequenza di campionamento: fc = 44.1 kHz (44.100 campioni) per i 2 canali
Quantizzazione:16 (2 byte) bit/campione = 65536 valori diversi per campione (numero di livelli di quantizzazione)
Il numero di bit memorizzati è dunque:
Nbit = F(durata, fc, bit/campione)
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 88
Dal mondo reale al calcolatore (e viceversa)
DIGITALIZZAZIONE
(campionam. & quantizz.)
NB: HW per
acquisizione sonora
(es. microfono)memorizzazione,
eventuali elaborazioni…
…
00100101000010010100
Nel calcolatore
CONVERSIONE
DIGITALE-ANALOGICA
NB: scheda audio riceve i valori
digitali e ricostruisce il segnale
analogico + diffusori
Dal mondo reale al calcolatore
Dal calcolatore al mondo reale
Daniela Fogli – Elementi di Informatica e Programmazione 99
Alcuni formati audio
WAVE: .wav, occupano molto spazio (corrisponde a quanto visto
nei lucidi precedenti: ~1MB per minuto)
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.
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 1010
Campionamento: 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)
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
Codifica delle immagini
Daniela Fogli – Elementi di Informatica e Programmazione 1111
Campionamento e quantizzazione: esempio
Maggie Cheung dal film “Hero” di Zhang Yimou (2002)
Daniela Fogli – Elementi di Informatica e Programmazione 1212
Campionamento
Daniela Fogli – Elementi di Informatica e Programmazione 1313
Quantizzazione
Per ogni pixel un certo numero di byte
es. 3 byte (colori) o 1 byte (b/n)Daniela Fogli – Elementi di Informatica e Programmazione 1414
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:
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 1515
• L’informazione sul colore di ogni pixel occupa 3 byte, uno per ogni colore primario (rosso, verde, blu)
• 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
R=90, G=85, B=12
R=0, G=0, B=0R=255, G=255, B=255
Immagini bitmap RGB
Daniela Fogli – Elementi di Informatica e Programmazione 1616
Problemi con immagini bitmap
Ogni ingrandimento fa perdere qualità (l’immagine si
“sgrana”) – vedi prossimo lucido
per evitare questo problema si può usare la codifica vettoriale
Occupano molta memoria. Possibili soluzioni:
uso di tavolozze (palette)
formati compressi
codifica vettoriale
Daniela Fogli – Elementi di Informatica e Programmazione 1717
Un’immagine RGB occupa:
3 byte x risoluzione verticale x risoluzione orizzontale
Esempio: un’immagine RGB con risoluzione 1024x768
pixel necessita di più di 2 MB
… e se la
ingrandisco si
sgrana…
Immagini bitmap: esempio
Daniela Fogli – Elementi di Informatica e Programmazione 1818
Uso di tavolozze (palette)
Spesso un’immagine utilizza un numero limitato di colori (scelti
comunque tra l’insieme ampio di tutti i colori rappresentabili)
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
0 1 1
1
1 0
Insieme dei
16 M colori
IMMAGINE CODIFICATA
Tavolozza
(2*3 byte) Matrice (1 bit per pixel)
01
…
Daniela Fogli – Elementi di Informatica e Programmazione 1919
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?
Esercizio
Daniela Fogli – Elementi di Informatica e Programmazione 2020
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?
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
Esercizio
Daniela Fogli – Elementi di Informatica e Programmazione 2121
I formati di file bitmap
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
JPEG 2000: formato ancor più compresso, .j2k o .jp2
Daniela Fogli – Elementi di Informatica e Programmazione 2222
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: Controllo accurato di linee e colori
Ingrandimento, riduzione, rotazione senza perdita
Possibilità inserimento testo attorno agli oggetti
Alcuni formati: DXF, DWG, CDR, AI, WMF
Daniela Fogli – Elementi di Informatica e Programmazione 2323
Immagini vettoriali: esempioImmagini vettoriali: esempio
Daniela Fogli – Elementi di Informatica e Programmazione 2424
Codifica di sequenze video
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 2525
Come è rappresentato un brano musicale su un vecchio disco di vinile?
Come è rappresentato un brano musicale su un CD?
rappresentazione
digitale (il supporto dà
una informazione cha va
decodificata)
0101 0011 0011
rappresentazione analogica (la forma del
solco descrive per analogia il suono da
produrre)
Mondo analogico e mondo digitale
Daniela Fogli – Elementi di Informatica e Programmazione 2626
Rappresentazione analogica e digitale
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 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)
Daniela Fogli – Elementi di Informatica e Programmazione 2727
Esempio
(a) Corrispondenza fra l’orario e la posizione dell’ago sulla scala
(b) Configurazioni convenzionali: combinazioni di segmenti illuminati
Daniela Fogli – Elementi di Informatica e Programmazione 2828
Perché la rappresentazione digitale? E perché proprio quella binaria?
Una qualunque grandezza fisica può essere convertita
in forma digitale (conversione analogico-digitale o
digitalizzazione)
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 2929
Volt
5
0
1
2
3
4
0
1
2
3
4
Volt
0
2.5
5
0
1
(a) (b)
0 V
+5 V
Valore 0
Valore 1
In realtà:
• 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 suquella analogica
• In particolare la codifica binaria è quella migliore
Immunità al rumore (affidabilità)
1.5 V
3.5 V
Daniela Fogli – Elementi di Informatica e Programmazione 3030
Altre ragioni del “predominio del digitale”
Molte informazioni sono di natura “prettamente simbolica”
Uniformità nella rappresentazione: una varietà ristretta di
dispositivi può realizzare svariate funzioni
Tecniche di codifica e trasmissione uniformi su tipologie di
informazioni diverse
Elaborazione simbolica (numerica) delle informazioni digitali
(mediante operazioni matematiche) in tempi brevi
Elaborazione digitale per modificare le caratteristiche di un segnale
analogico (es. restauro di incisioni audio o di pellicole
cinematografiche)
Elementi di Informatica e Programmazione
La Codifica dell’informazione(parte 5)
Corsi di Laurea in:
Ingegneria CivileIngegneria per l’Ambiente e il Territorio
Università degli Studi di Brescia
Docente: Daniela Fogli
Daniela Fogli – Elementi di Informatica e Programmazione 22
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 rivelazione e correzione di errori
Codici di compressione (senza | con perdita)
Tipologie di codici
Daniela Fogli – Elementi di Informatica e Programmazione 33
Informazioni da memorizzare
(ad esempio: in un CD)
00110101000011010100
11100101001110010100
00100101000010010100
.
.
.
Un esempio: memorizzazione di informazioni
Daniela Fogli – Elementi di Informatica e Programmazione 44
Informazioni da memorizzare
(ad esempio: in un CD)
00110101000011010100
11100101001110010100
00100101000010010100
.
.
.
Un esempio: memorizzazione di informazioni
???
Daniela Fogli – Elementi di Informatica e Programmazione 55
00110101000011010100
11100101001110010100
00100101000010010100
.
.
.
10110101001011010100
11110100001111010000
10100101001010010100
.
.
.
???
Un esempio: trasmissione di informazioni
Daniela Fogli – Elementi di Informatica e Programmazione 66
LA SOLUZIONE
Su una sequenza di bit, usare dei codici particolari che permettono:
• Di rivelare la presenza di errori:
CODICI RIVELATORI
• Di correggere gli errori, ricostruendo la sequenza originaria:
CODICI CORRETTORI
Errore: modifica di un bit (0 diventa 1 oppure 1 diventa 0)
Posso avere uno o più errori
Errore
Daniela Fogli – Elementi di Informatica e Programmazione 77
Non è possibile rivelare né correggere errori
dominio
O1
O2
codominio
110
011
111
001
O3101
insieme delle
codifiche
000
010
100
O4
O5
O6
O7
O8
8 oggetti, 3 bit: il codice è non ridondante
Per rivelare o correggere errori dobbiamointrodurre della ridondanza
Come?
Daniela Fogli – Elementi di Informatica e Programmazione 88
Esempio:
codice
ridondante
a due bit
dominio
O1
O2
codominio
01
00
11
10
insieme delle
codifiche
insieme delle
non-codifiche
L’insieme delle codifiche è un sottoinsieme proprio del codominio
⇒ l’insieme delle non codifiche è non nullo
Per esempio:
se codifico O1 e ho un errore (ad esempio sul primo bit)ottengo 10 ⇒ rivelazione dell’errore
Codice ridondante
Daniela Fogli – Elementi di Informatica e Programmazione 99
Voglio un codice che, per qualunque codifica sia in grado di rilevare/correggere k errori comunque siano distribuiti
Esempio: un semplice codice per due entità, 5 bit
BresciaAtalanta
00000 11111 Distanza tra le
codifiche: d = 5
• Si può dimostrare che si possono rivelare fino a k = 4 errori (d ≥ k+1)
• Si può dimostrare che si possono correggere fino a k = 2 errori(d ≥ 2k+1)
Quanto?
Daniela Fogli – Elementi di Informatica e Programmazione 1010
00000 11111
d = 5
Fino
a 4 errori
Rivelazione: l’idea
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)
Daniela Fogli – Elementi di Informatica e Programmazione 1111
00000 11111
d = 5 ≥ 2k+1
k k≥1
≥ k+1
Correzione: l’idea
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
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 1212
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)
Distanza di un codice: minimo valore delle distanze tra ogni coppia di elementi appartenenti all’insieme delle codifiche
Rivelazione e correzione di errori
• Per rivelare k errori, un codice deve avere distanza d cond ≥ k+1
• Per correggere k errori, un codice deve avere distanza d cond ≥ 2k+1
In generale
Daniela Fogli – Elementi di Informatica e Programmazione 1313
Esempio di codice rilevatore: il codice di parità
d = 2 (a partire da una codifica con un numero pari di 1 è necessario modificare almeno 2 bit per ottenere una sequenza chea sua volta abbia un numero pari di 1, ovvero che sia una codifica)
⇒ può rivelare un errore, correggerne nessuno
Dato un codice: si aggiunge un bit in modo che il numero
di 1 sia pari (parità pari) [o dispari (parità dispari)]
Esempio
0011100
Bit di parità (codice a parità pari)
Codice di parità
Codice ASCII a 7 bit
1
Daniela Fogli – Elementi di Informatica e Programmazione 1414
Per codificare i tre simboli D, F, I si utilizza il seguente codice a 5 bit:
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?
b) E quanti errori è in grado di correggere?
Esercizio
Daniela Fogli – Elementi di Informatica e Programmazione 1515
d12 = 3
d23 = 4
d13 = 3
la distanza del codice è pari a 3
a) Errori rilevati:
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)
Soluzione
Daniela Fogli – Elementi di Informatica e Programmazione 1616
Si consideri il codice a tre valori originari
‘1’ codificato con 000000
‘2’ codificato con 000001
‘3’ codificato con 111111
a) Trovare quanti errori può correggere e rivelare in generale.
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)?
Esercizio
Daniela Fogli – Elementi di Informatica e Programmazione 1717
Soluzione (a)
a) Risulta:
d12 = 1 d23 = 5 d13 = 6
quindi la distanza del codice è 1
⇒ 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]
Daniela Fogli – Elementi di Informatica e Programmazione 1818
Soluzione (b)
b) Ricevo 001111, mentre avevo:
‘1’ � 000000 dist1 = 4
001111
‘2’ � 000001 dist2 = 3
001111
‘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é:
dist1 = 4 > 2 [000000 non può essere modificato in 001111]
dist2 = 3 > 2 [000001 non può essere modificato in 001111]
Daniela Fogli – Elementi di Informatica e Programmazione 1919
Perchè?
Come mai posso correggere due errori anche se
(cfr. punto a) il codice ha distanza 1?
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
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 2020
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 rivelazione e correzione di errori
Codici di compressione (senza | con perdita)
Tipologie di codici
Daniela Fogli – Elementi di Informatica e Programmazione 2121
La compressione dei dati
Cambiando modalità di codifica è possibile ridurre il numero dei bit richiesti
Vantaggi per memorizzazione e trasmissione
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 2222
Concetti fondamentali
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))
Due tipi di compressione dei dati:
senza perdita (lossless)è garantito che Fd(Fc(S)) = S, ovvero Fd=Fc
-1
con perdita (lossy)in generale Fd(Fc(S)) ≠ S (perdita di informazione)
Daniela Fogli – Elementi di Informatica e Programmazione 2323
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: 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 2424
Algoritmi di compressione dati con perdita
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: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)