54
Elementi di Informatica e Programmazione La Codifica dell’informazione (parte 1) Corsi di Laurea in: Ingegneria Civile Ingegneria per l’Ambiente e il Territorio Università degli Studi di Brescia Docente: Daniela Fogli Daniela Fogli – Elementi di Informatica e Programmazione 2 2 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 3 3 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 4 4 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 sequenziale 1. 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

Elementi di Informatica e Premessa Programmazione · La Codifica dell’informazione (parte 1) Corsi di Laurea in: Ingegneria Civile Ingegneria per l’Ambiente e il Territorio Università

  • Upload
    vunhu

  • View
    215

  • 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)