• Non ci sono risultati.

Rappresentazione Rappresentazione dell'informazione dell'informazione

N/A
N/A
Protected

Academic year: 2021

Condividi "Rappresentazione Rappresentazione dell'informazione dell'informazione"

Copied!
53
0
0

Testo completo

(1)

Rappresentazione Rappresentazione

dell'informazione dell'informazione

Moreno Marzolla

Dipartimento di Informatica—Scienza e Ingegneria (DISI) Università di Bologna https://www.moreno.marzolla.name/

Cap. 1 dispensa

(2)
(3)
(4)

Rappresentazione dell'informazione

I calcolatori elettronici rappresentano qualsiasi tipo di informazione come una sequenza di cifre binarie (bit)

– In particolare, sia i dati che il calcolatore elabora, sia le istruzioni che esegue, sono codificate con sequenze di bit

Bit

Una singola cifra binaria: 0 (F, falso) oppure 1 (T, vero)

Byte

– Una sequenza di 8 cifre binarie: es 0010 1110

Parola (Word)

– Una sequenza di 4 Byte (= 32 cifre binarie)

(5)

Operazioni elementari sui bit

Altre notazioni usate comunemente:

– A AND B = A ∧ B = A · B

– A OR B = A ∨ B = A + B

– NOT A = ¬ A = A

A B

0 0 0

0 1 0

1 0 0

1 1 1

A AND B A B

0 0 0

0 1 1

1 0 1

1 1 1

A OR B A

0 1

1 0

NOT A

A B

A B

A

(6)

Alcune proprietà

Elemento neutro

– A ∧ 1 = 1 ∧ A = A

– A ∨ 0 = 0 ∨ A = A

Massimo e minimo

– A ∧ 0 = 0 ∧ A = 0

– A ∨ 1 = 1 ∨ A = 1

Assorbimento

– A ∧ (A ∨ B) = A

– A ∨ (A ∧ B) = A

Distributività

– A ∧ (B ∨ C) = (A ∧ B) ∨ (A ∧ C)

– A ∨ (B ∧ C) = (A ∨ B) ∧ (A ∨ C)

De Morgan

– ¬ (A ∧ B) = (¬ A) ∨ (¬ B)

– ¬ (A ∨ B) = (¬ A) ∧ (¬ B)

(7)

Esempio dimostrazione ¬ (A ∧ B) = (¬ A) ∨ (¬ B)

(¬ A) ∨ (¬ B)

¬ (A ∧ B)

A B

0 0 1 1

0 1 0 1

0 0 0 1 1

1 1 0

1 1 0 0

1 0 1 0 1

1

1

0

(8)

Operazioni elementari sui bit

A B

0 0 0

0 1 1

1 0 1

1 1 0

A XOR B

A B

A ⊕ B ≡ (¬A ∧ B) ∨ (A ∧ ¬B)

(9)

Rappresentazione dell'informazione

Come rappresentare

– Numeri (interi, reali)

– Testi (sequenze di caratteri)

– Suoni, immagini, video

(10)

Rappresentazione di numeri non negativi

Una sequenza di N bit può rappresentare un intero non negativo in base 2

Esempio: quanto vale 00110101

2

?

Risposta: 32 + 16 + 4 + 1 = 53

– Si sommano i pesi corrispondenti alle cifre binarie “1”

Con N bit possiamo rappresentare tutti gli interi appartenenti all'insieme {0, … 2

N

- 1}

128 64 32 16 8 4 2 1

0 0 1 1 0 1 0 1

pesi

cifre binarie

(11)

Conversione decimale→binario

Si può procedere così

– Si divide il numero decimale ripetutamente per 2.

– I resti della divisione danno le cifre della rappresentazione binaria, a partire dalla cifra meno significativa

Es: come si scrive 74

10

in binario?

– 74 / 2 = 37 resto 0 37 / 2 = 18 resto 1

18 / 2 = 9 resto 0

9 / 2 = 4 resto 1

4 / 2 = 2 resto 0

2 / 2 = 1 resto 0

1 / 2 = 0 resto 1

1001010 2

Cifra più a destra

Cifra più a sinistra

(12)

Conversione decimale→base B

Si può procedere così

– Si divide il numero decimale ripetutamente per B

– I resti della divisione danno le cifre della rappresentazione in base B, a partire dalla cifra meno significativa

Esempio: in base 16 abbiamo le cifre 0, … 9, A, … F

Come si scrive 157

10

in base 16?

– 157 / 16 = 9 resto 13 (D) 9 / 16 = 0 resto 9 (9)

157 10 = 9D 16

(13)

...e i numeri negativi?

Si utilizza la rappresentazione in complemento a due

Con N bit, il valore intero x viene codificato in binario allo stesso modo di 2

N

+ x

– scartando gli eventuali bit in eccesso a sinistra

(14)

Esempio

Supponiamo di avere N = 4 bit, e di voler codificare il numero x = 6

– 2

N

+ x = 2

4

+ 6 = 22

– 22

10

in binario si scrive 10110

2

– Abbiamo a disposizione solo 4 bit, quindi scartiamo quello più a sinistra: rimane 0110

2C

La rappresentazione in complemento a 2 di 6

10

coincide con la normale rappresentazione binaria

– Questo vale per tutti i numeri non negativi

– 0

10

(decimale) in complemento a due si scrive 0...0

2C

(una

sequenza di N zeri)

(15)

Esempio

Rappresentiamo x = -7 con N = 4 bit in compl. a due

– 2

N

+ x = 2

4

– 7 = 9

– 9

10

in binario si scrive 1001

2

quindi -7

10

= 1001

2C

Osservazione 1

– I numeri negativi (in complemento a due) hanno sempre il primo bit a sinistra 1; i numeri positivi hanno 0

Osservazione 2

Con N bit è possibile rappresentare in complemento a due i valori interi compresi tra -(2

N-1

) e 2

N-1

-1 (estremi inclusi)

Con N = 8 bit [-128, 127]

Con N = 16 bit [-32768, 32767]

Con N = 32 bit [-2147483648, 2147483647]

(16)

Conversione

complemento a 2 → decimale

Si procede come per la conversione binario →

decimale, con la differenza che il peso della cifra più a sinistra è -2

N-1

anziché 2

N-1

Esempio: quanto vale 10110101

2C

?

– Risposta: -128 + 32 + 16 + 4 + 1 = -75

-128 64 32 16 8 4 2 1

1 0 1 1 0 1 0 1

pesi

cifre binarie

(17)

Somma in complemento a due

Si usano le regole della somma binaria "normale"

Calcolare 5

10

– 7

10

in compl. a due con N = 4 bit

– 5

10

= 0101

2C

– -7 si rappresenta come 2

4

- 7 = 16 - 7 = 9

10

= 1001

2C

Sommando 0101

2C

+ 1001

2C

si ottiene 1110

2C

– Il primo bit a sinistra vale uno, quindi è un valore negativo

– Infatti 1110

2C

= -8 + 4 + 2 = -2

(18)

Somme con riporto in base 2

a b c (a+b+c) c'

0 0 0 0 0

0 0 1 1 0

0 1 0 1 0

0 1 1 0 1

1 0 0 1 0

1 0 1 0 1

1 1 0 0 1

1 1 1 1 1

(19)

Errore di overflow

Se x e y hanno lo stesso segno, può verificarsi overflow. Esempio con N = 4 bit

– valori rappresentabili in complemento a due: -8 ... +7

Riporto 1 0 0 0

1 1 1 0

2C

+ 1 0 0 0

2C

= 1 0 1 1 0

2C

-2 -8 = 6 ?!?!?

Riporto 0 1 1 0

0 0 1 1

2C

+ 0 1 1 0

2C

= 1 0 0 1

2C

3 + 6 = -7 ?!?!?

(-2)

10

+ (-8)

10

3

10

+ 6

10

(20)

Quando si verifica overflow?

Quando entrambe le seguenti condizioni sono vere

– Gli operandi hanno lo stesso segno

– Il segno della somma è diverso da quello degli operandi

1 1 1 0

2C

+ 1 0 0 0

2C

= 0 1 1 0

2C

0 0 1 1

2C

+

0 1 1 0

2C

=

1 0 0 1

2C

(21)

Errore di overflow

Se x e y sono due numeri con segno diverso in complemento a due con N bit, (x + y) sarà ancora rappresentabile con N bit in complemento a due

Infatti: supponiamo che x sia positivo e y negativo 0 ≤ x ≤ 2

N-1

-1 -2

N-1

≤ y ≤ 0

da cui (sommando membro a membro):

-2

N-1

≤ x + y ≤ 2

N-1

-1

Quindi: se x e y sono due numeri con segno diverso in

complemento a due con N bit, la loro somma non può

generare overflow

(22)

Rappresentazione di numeri reali

Come rappresentiamo un numero reale (“con la virgola”), come ad es. 34,765

10

?

Usiamo la notazione scientifica normalizzata:

– 34,765 = 3,4765 × 10

1

– 0,007653 = 7,653 × 10

-3

Osserviamo che

3,4765 = 3×10

0

+ 4×10

-1

+ 7×10

-2

+ 6×10

-3

+ 5×10

-4

(23)

Rappresentazione di numeri reali

Lo stesso si può applicare anche per la base 2

1,1011

2

= 1´2

0

+ 1´2

-1

+ 0´2

-2

+ 1´2

-3

+ 1´2

-4

= 1,6875

10

Possiamo scrivere un numero reale diverso da zero in base 2 come

Dove:

mmm.. sono le cifre della parte frazionaria della mantissa

eee... rappresenta l'esponente

Non si usa la rappresentazione in complemento a due, bensì la notazione “con bias”, vedi lucido seguente

±1, m m m...×2 e e e ...

(24)

Rappresentazione di numeri reali

Solitamente si usa un numero fisso di cifre per la mantissa e per l'esponente

– Es: standard IEEE 754 singola precisione: 32 bit totali così suddivisi

s eeeeeeee mmmmmmmmmmmmmmmmmmmmmmm

Esponente

si converte in intero senza segno e si

Mantissa normalizzata dopo la virgola (prima della virgola si

assume 1) Segno

0 = positivo

1 bit 8 bit 23 bit

(25)

Esempio

Valore: -1,6875 ´ 2

-3

= -0,2109375

10

1 0111 1100 101 1000 0000 0000 0000 0000

Segno: -

Esponente: 0111 1100

2

= 124

10

124

10

– 127

10

= -3

10

Mantissa: 1,1011

2

= 1,6875

10

(26)

Attenzione

L'aritmetica in virgola mobile può introdurre errori di approssimazione

Esempio: la rappresentazione in base 2 di (0.1)

10

è infinita!

– (0.1)

10

= (0.00011)

2

– Troncando la rappresentazione binaria a 53 bit dopo la virgola (arrotondando) si ha

che è leggermente maggiore di 0.1

10

0.0001100110011001100110011001100110011001100110011001101

2

= 0.1000000000000000055511151231257827021181583404541015625

10

(27)

Quindi

In virgola mobile non valgono molte proprietà degli operatori aritmetici

– a + (b + c) potrebbe essere diverso da (a + b) + c

– 0.9 potrebbe essere diverso da (1.0 – (1.0 × 0.1))

– ...eccetera

(28)

Riepilogo

Rappresentazione in base 2

– Interi positivi

– Interi positivi e negativi (complemento a due)

– Valori reali

Che dire di altri tipi di informazione?

– Caratteri alfanumerici

– Suoni

– Immagini

– ...

– Le istruzioni eseguite dalla CPU

(29)

Codifica di caratteri

(30)

Codifica dei caratteri

Quanti simboli dobbiamo rappresentare?

26 lettere minuscole

26 lettere maiuscole

10 numeri (0—9)

simboli vari (%, $, “...)

alcuni caratteri di controllo (Return, Canc, Insert...)

La codifica ASCII usa 7 bit per codificare 2

7

= 128 caratteri

Dato che i calcolatori moderni lavorano con byte di 8 bit, si usa la codifica ASCII estesa (extended ASCII) che usa 8 bit per

carattere

La codifica UNICODE usa 8, 16 o 32 bit

Con 32 bit si possono identificare 2

32

= 4 294 967 296 simboli

diversi

(31)

"ASCII-Table-wide" by ASCII-Table.svg: ZZT32derivative work: LanoxxthShaddow - ASCII-Table.svg. Licensed

ASCII = American Standard Code

for Information Interchange

(32)

Da ricordare

Le lettere minuscole hanno codici ASCII consecutivi

– 'a' = 97, 'b' = 98, 'c' = 99, ...

Le lettere maiuscole hanno codici ASCII consecutivi

– 'A' = 65, 'B' = 66, 'C' = 67, ...

I numeri hanno codici ASCII consecutivi

– '0' = 48, '1' = 49, '2' = 50, ...

(33)

Codifica di immagini

(34)

Codifica di immagini

Le immagini non sono formate da “sequenze” di oggetti ben definiti come i numeri e i testi

Per poterle rappresentare bisogna prima

“discretizzarle”

– Cioè trasformarle in un insieme di parti “discrete” che possono essere codificate con sequenze di bit

Consideriamo prima immagini fisse (foto etc …)

(35)

Immagini bitmap

L’immagina viene scomposta in una griglia di elementi detti pixel (da picture element)

Immagine originale Rappresentazione bitmap

(36)

Immagini bitmap

Ciascun pixel di una immagine in bianco e nero può essere rappresentato da un singolo bit

– Ad es., 0 = bianco, 1 = nero

0000000000000000 0000000000000000 0000000000000000 0000011111000000 0000100000100000 0001001010010000 0001000000010000 0001010001010000 0001001110010000 0000100000100000 0000011111000000

00000000 00000000

00000000 00000000

00000000 00000000

00000111 11000000

00001000 00100000

00010010 10010000

00010000 00010000

00010100 01010000

00010011 10010000

00001000 00100000

00000111 11000000

(37)

Immagini bitmap

Immagini a toni di grigio

– Un byte per pixel

(0=bianco, 255=nero, gli altri valori rappresentano toni intermedi di grigio)

Immagini a colori: più bit (es., 3 byte) per pixel

– 1 byte per la componente Rossa (0—255)

– 1 byte per la componente Verde (0—255)

– 1 byte per la componente Blu (0—255)

R:255 G:255 B:255

R:162 G:162 B:255 R:255

G:51B:51

R:0 G:255

B:0

R:0 G:0B:0

R:0 G:255

B:0

R:0 G:255

B:0

R:0 G:255

B:0

R:0 G:255

B:0

R:0 G:255

B:0

R:0 G:255

B:0

R:0 G:255

B:0 R:162

G:162 B:255 R:162

G:162 B:255

R:162 G:162 B:255

R:162 G:162 B:255

R:162 G:162 B:255 R:162

G:162 B:255

R:162 G:162 B:255

R:162 G:162 B:255

R:1

62 G:1

62 55 B:2

R:162 G:162 B:255

R:162 G:162 B:255 R:255

G:51B:51

R:255 G:51B:51

R:255 G:51B:51

R:255 G:51B:51 R:255

G:51B:51

R:255 G:51B:51

R:255 G:51B:51

R:255 G:51B:51 R:255

G:51B:51 R:255

G:51B:51

R:255 G:51B:51

R:255 G:51B:51

R:255 G:51B:51 R:0

G:0B:0 R:255

G:255 B:255

R:255 G:255 B:255

R:255 G:255 B:255

R:255 G:255 B:255 R:255

G:255 B:255

R:255 G:255 B:255 R:255

G:255 B:255 R:255

G:255 B:255

R:255 G:255 B:255 R:255

G:255 B:255 R:255

G:255 B:255

R:255 G:255 B:255 R:255

G:255 B:255 R:255

G:255 B:255

R:255 G:255 B:255 R:255

G:255 B:255 R:255

G:255 B:255

R:255 G:255 B:255 R:255

G:255 B:255

R:255 G:255 B:255 R:255

G:255 B:255

R:255 G:255 B:255 R:255

G:255 B:255

R:255 G:255 B:255 R:255 G:255 B:255 R:255

G:255 B:255 R:255 G:255 B:255

(38)

Immagini vettoriali

L'immagine è descritta mediante primitive geometriche

(linee, cerchi, poligoni...) di cui si specificano i parametri

(39)

Immagini bitmap vs vettoriali

Ne consegue che le immagini vettoriali possono essere

scalate senza perdita di dettaglio

I formati vettoriali sono adatti a disegni tecnici, ma non si

prestano alla rappresentazione di immagini reali (es., un volto, un paesaggio)

By The original uploader was Darth Stabro at English Wikipedia - Transferred from en.wikipedia to Commons by

(40)

Codifica di immagini

La rappresentazione accurata di una immagine bitmap dipende

– dal numero di pixel (definizione, o risoluzione)

– dalla codifica del pixel

…e richiede generalmente molta memoria

Risoluzione N. colori Byte Immagine

Televisiva 720 ´ 625 256

(8 bpp) 450'000 Telev. 4K 3840 ´ 2160 4096

(12 bpp) 12'441'600 Foto 15000 ´ 10000 16 milioni

(24 bpp) 450'000'000

(41)

Esercizio

Una immagine ha una risoluzione di 1800 ´ 1200

pixel; ogni pixel può avere un colore scelto tra 65536 colori possibili

Quanti Byte sono necessari per codificare l'immagine?

– Ipotizzare che il colore di un pixel sia rappresentato con il minimo numero di bit necessari per rappresentare

univocamente un intero tra 0 e 65535

– Trascurare lo spazio necessario per memorizzare la

“tavolozza dei colori”

(42)

Algoritmi di compressione

Per “risparmiare” memoria si impiegano tecniche di compressione

Alcuni formati comunemente usati

– JPEG (immagini)

– MP3, FLAC (audio)

– MP4, H.264 (video)

– ZIP, RAR, BZ2 (file generici)

(43)

Algoritmi di compressione

Algoritmi lossless (senza perdita di informazione):

Operano un cambiamento di codifica dei dati che permette di diminuire il numero di bit necessari alla rappresentazione

Consentono di ricostruire esattamente la sequenza di dati originali a partire dai dati compressi

Esempio: sequenza di 1 milione di caratteri scelti tra A, B, C, D

Usando la codifica ASCII: 8 milioni di bit

Usando una codifica ad hoc a lunghezza fissa, es. A=00, B=01, C=10, D=11: 2 milioni di bit

Supponiamo di sapere che il 90% dei caratteri sono A. Allora usando la codifica a lunghezza variabile A=0, B=100, C=110, D=111 sono richiesti:

900 000 ´ 1 + 100 000 ´ 3 = 1 200 000 bit

(44)

Algoritmi di compressione

Algoritmi lossy (con perdita di informazione)

– Sfruttano le caratteristiche degli oggetti da rappresentare per scartare informazione “poco importanti“

– Possono ottenere livelli di compressione elevati, ma non

consentono di ricostruire esattamente i dati originali a partire da quelli compressi

Alcune informazioni sono eliminate dal processo di compressione

– L'algoritmo JPEG sfrutta la caratteristica dell’occhio umano di essere poco sensibile a lievi cambiamenti di colore in

punti contigui, e quindi elimina questi lievi cambiamenti

“appiattendo” il colore dell’immagine

È possibile specificare mediante alcuni parametri quanto siamo

disposti a perdere in qualità nel processo di compressione

(45)
(46)

Codifica di video e audio

(47)

Codifica di video

Il movimento è simu- lato mostrando imma- gini fisse in sequenza (24-30 al secondo) che l’occhio umano percepisce come un continuo

Per risparmiare spa- zio alcuni metodi di codifica memorizzano solo le “differenze” fra un fotogramma e

l’altro

http://nickyguides.digital-digest.com/keyframes.htm

(48)

Codifica di suoni

Un generico suono (o segnale analogico) è rappresentato da un'onda continua

Tempo

(49)

Codifica di suoni Campionamento

Il segnale viene misurato ad istanti discreti

– Es: 1KHz = 1000 campioni/sec = 1 campione/msec

Tempo

(50)

Codifica di suoni Quantizzazione

Per ogni campione, il valore assunto dal segnale viene espresso con un numero finito di bit (quantizzazione)

Tempo

Segnale originale Segnale campionato e quantizzato

(51)

Codifica di suoni

L’accuratezza della ricostruzione dipende:

– da quanto sono piccoli gli intervalli di campionamento (intervalli più piccoli → qualità migliore)

– da quanti bit vengono utilizzati per descrivere il suono in ogni campione (più bit → qualità migliore)

Gli algoritmi lossy di compressione audio sfruttano il fatto che per l’orecchio umano suoni a basso volume sovrapposti ad altri di volume maggiore sono poco udibili e possono essere eliminati

– È quello che accade nello standard MPEG Layer 3 (MP3)

(52)

Idee chiave

Rappresentazione binaria di interi

Complemento a due

Rappresentazione di informazione non numerica

Compressione lossless e lossy

Campionamento e discretizzazione

(53)

Riferimenti

Documenti correlati

determinato dal valore del bit meno significativo della mantissa il quale dipende dalla caratteristica:. 0.000000000000000000000001 2 ×

determinato dal valore del bit meno significativo della mantissa il quale dipende dalla caratteristica:. 0.000000000000000000000001 2 ×

determinato dal valore del bit meno significativo della mantissa il quale dipende dalla caratteristica:. 0.000000000000000000000001 2 ×

 Sfruttano il fatto che per l’orecchio umano suoni a basso volume sovrapposti ad altri di volume maggiore sono poco udibili e possono essere eliminati.  E' quello che accade

Sono stati quindi esaminati tre casi diversi: nel primo l’informazione a priori è stata derivata dalle stesse osservazioni a disposizione all’epoca in esame (caso1), nel secondo

In questi casi è opportuno semplificare l’algoritmo arrestando la scomposizione del problema in sottoproblemi terminali anche non elementari (cioè non direttamente eseguibili)

Inoltre per quanto riguarda la parte intera del numero posso adottare sia l’algoritmo di conversione per divisione sia quello per moltiplicazione.... Rappresentazione di interi

Esercizi sulla codifica dei numeri binari Esercizi sulle operazioni con i numeri binary Codifica IEEE754 dei numeri reali anche in forma denormalizzata.