La codifica dell`informazione

annuncio pubblicitario
INFORMATICA GENERALE E BASI
DI DATI PER ARCHIVI
AUDIOVISIVI (PRIMO MODULO)
Claudio Piciarelli
A.A. 2013/2014
Lezione 1
La codifica dell’informazione
Cos’è l’informatica?
Dipende dai punti di vista…
Per l’utente medio è l’uso quotidiano del computer
Per l’ingegnere è una tecnologia
Per l’informatico è una scienza
Cos’è l’informatica?
Informatica = INFORmazione autoMATICA
L’informatica è quella scienza che studia come
rappresentare, organizzare, manipolare
l’informazione
Non a caso il corso di laurea in informatica una
volta si chiamava «scienze dell’informazione»!
Dialogo realmente avvenuto:
- In cosa ti sei laureato?
- In scienze dell’informazione
- Ah, allora fai il giornalista!
Cos’è l’informazione?
L’informazione è uno scambio di conoscenza
Nell’ambito della Teoria dell’Informazione se ne dà
una definizione probabilistica: un evento porta
tanta informazione se è poco probabile
«In questo momento al Polo Nord fa freddo»
Probabilità molto alta
poca informazione
«In questo momento al Polo Nord ci sono esattamente -43,65 gradi»
Probabilità bassa
molta informazione
Codifica dell’informazione
Codificare l’informazione significa memorizzare un
concetto astratto (l’informazione) su un supporto
fisico (un pezzo di carta, la memoria di un
computer…)
Il numero 8
8
Informazione
decodifica
codifica
Supporto fisico
Codifica dell’informazione
Duplice interpretazione
Due
8
macchie di inchiostro
nero di forma circolare su
un pezzo di carta
(supporto fisico)
Il
numero 8 (informazione
codificata nel supporto
fisico)
Codifica dell’informazione
La stessa informazione può essere codificata in
modi diversi
Il numero 8
8
Informazione
VIII
Supporto fisico
Codifica dell’informazione
E a volte lo stesso supporto può essere decodificato
in modi diversi
Il numero centoventitre virgola
quattro zero uno, nella
notazione italiana
Il numero centoventitremila
quattrocento uno, nella
notazione anglosassone
Informazione
123,401
Supporto fisico
Codifica dei numeri decimali
Occorre innanzitutto un insieme di simboli. Questo
insieme è genericamente detto alfabeto
A = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }
Serve inoltre un’opportuna regola di codifica, nel
nostro caso la notazione posizionale: l’ultima cifra a
destra rappresenta le unità e pesa 1, la penultima
rappresenta le decine e pesa 10, la terzultima
pesa 10 , la quartultima 10 , ecc.
Notazione posizionale
427
Quattro centinaia, due decine e sette unità. Ovvero:
4 ∗ 10 + 2 ∗ 10
+ 7 ∗ 10
Più in generale, dato un numero decimale di n cifre
… il suo valore è
∗ 10
+ ∗ 10 + … + ∗ 10
+ ∗ 10
(Nota: ricordatevi che qualsiasi numero diverso da 0, se elevato alla 0, dà 1)
Numeri in base decimale
Con queste regole è facile contare in decimale.
0, 1, 2, 3, 4, 5, 6, 7, 8, 9
10, 11, 12, 13, 14, 15, 16, 17, 18, 19
20, 21, 22, 23, 24, 25, 26, 27, 28, 29
…
(nota: in questa lezione ci limitiamo a considerare i numeri naturali)
Numeri in altre basi
Cosa succede se cambiamo l’alfabeto? Ad esempio
se usassimo solo questi simboli:
A = { 0, 1, 2, 3, 4, 5, 6, 7 }
Si parla in questo caso di numeri in base ottale (la
«base» è il numero di simboli nell’alfabeto).
Usando la solita notazione posizionale, possiamo
contare in base ottale!
Numeri in base ottale
0, 1, 2, 3, 4, 5, 6, 7,
0
2
3
4
5
6
7
10, 11, 12, 13, 14, 15, 16, 17,
8
1
9
10
11
12
13
14
15
20, 21, 22, 23, 24, 25, 26, 27,
16
17
18
19
20
21
22
23
…
Quelli in nero sono i numeri in base ottale, quelli in rosso in base decimale. Per evitare
confusione, conviene scrivere i numeri indicando esplicitamente la base, come ad es.
numero
11
= 9
base
(leggi: uno uno in base 8 equivale a nove in base 10)
Conversione da ottale a decimale
Si usa la solita regola della notazione posizionale,
avendo cura di usare la base corretta!
147
= 1 ∗ 8 + 4 ∗ 8
+ 7
= 64 + 32 + 7
= 103 Formula aggiornata: dato un numero di n cifre in base B … il suo
valore in base decimale è:
∗ + ∗ + … + ∗ + ∗ Base esadecimale
A = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F }
0,
1,
2,
3,
4,
5,
6, 7, 8, 9,
A,
B,
C,
D, E,
F
0
1
2
3
4
5
6
10
11
12
13 14
15
8
9
10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 1A, 1B, 1C, 1D, 1E, 1F
16
7
17
18
19
20
21
22
23
24
25
26
27
28
29 30
31
20, 21, 22, 23, 24, 25, 26, 27, 28, 19, 2A, 2B, 2C, 2D, 2E, 2F
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
Conversione da esadecimale a dec.
Sappiamo già che = 10 , =
11 , … , = 15 Si usa la solita regola della notazione posizionale
80
= ∗ 16 + 8 ∗ 16 + ∗ 16
+ 0
= 16 ∗ 4096 + 8 ∗ 256 + 11 ∗ 16
= 67760 Base boh
A = { , , }
(in realtà è una banalissima base ternaria)
Quanto vale il numero ?
Soluzione: Se = 0, = 1, = 2, allora
= 1 ∗ 3 + 0 ∗ 3 + 2 ∗ 3
+ 2 ∗ 3 = 27 + 6 + 2 = 35
Conversioni dalla base decimale
Abbiamo visto come si può convertire facilmente un
numero da una base arbitraria B ad una decimale
Come è possibile fare l’inverso?
Divido
il numero decimale per B
Il RESTO della divisione è l’ultima cifra
Divido il QUOZIENTE per B
Il RESTO della divisione è la penultima cifra
Divido il QUOZIENTE per B
Il RESTO della divisione è la terzultima cifra
… (ripeto, finché il quoziente non è zero)
Conversioni dalla base decimale
Esempio: convertire 570 in base ottale
570
/ 8 = 71 col resto di 2
71 / 8 = 8 col resto di 7
8 / 8
= 1 col resto di 0
1 / 8
= 0 col resto di 1
Per cui 570
= 1072
Quanti numeri?
Quanti numeri posso rappresentare in base B
usando al massimo k cifre?
Risposta: numeri (da 0 a − 1)
Esempio: se B=10 e k=3, posso rappresentare
10 = 1000 numeri diversi, quelli da 0 a 999
Altro esempio: B=16, k=2, posso rappresentare
16 = 256 numeri diversi, da 0 a La base binaria
E’ la base più importante dell’informatica
A = { 0, 1 }
Contiamo in base binaria:
0, 1, 10, 11, 100, 101, 110, 111, 1000, 1001, …
Conversioni:
11001 = 1 ∗ 2 + 1 ∗ 2 + 1 = 25
Conversione binario - decimale
…
Ogni cifra corrisponde ad una potenza di due,
partendo da 2 per la cifra più a destra
Basta sommare le potenze in corrispondenza di un
1 nel numero binario
2 = 256
2! = 128
2 = 64
2" = 32
2 = 16
101101001
256 + 64 + 32 + 8 + 1
2 = 8
2 = 4
2
= 2
2 = 1
Conversione decimale - binario
Si usa il solito metodo
Esempio: convertire 81 in base binaria
81
/ 2 = 40 col resto di 1
40 / 2 = 20 col resto di 0
20 / 2 = 10 col resto di 0
10 / 2 = 5 col resto di 0
5 / 2 = 2 col resto di 1
2 / 2 = 1 col resto di 0
1 / 2 = 0 col resto di 1
Quindi
81 = 1010001
La base binaria
Ora potete finalmente capire questa battuta da
informatici:
Al mondo ci sono solo 10 categorie di
persone: quelli che conoscono la notazione
binaria, e quelli che non la conoscono.
La base binaria
Perché è così importante? L’unità minima di
informazione in un computer è il bit, che può
assumere solo due valori: 0 e 1.
Quindi qualsiasi dato, qualsiasi programma,
qualsiasi contenuto multimediale, ecc. memorizzato
in un computer non è altro che una lunga sequenza
di 0 e 1, ovvero un numero binario!
Bit e byte
Un byte è un insieme di 8 bit. Quanti valori diversi
può contenere?
Risposta: 2 = 256
Da 0 a 11111111
Ovvero 255
Multipli del bit
8 bit = 1 byte
2
byte = 1 KB (kilobyte)
2 byte = 1 MB (megabyte)
2 byte = 1 GB (gigabyte)
2 byte = 1 TB (terabyte)
2" byte = 1 PB (petabyte)
2 byte = 1 EB (exabyte)
2! byte = 1 ZB (zettabyte)
2 byte = 1 YB (yottabyte)
(1024 byte)
(1024 KB)
(1024 MB)
(1024 GB)
(1024 TB)
(1024 PB)
(1024 EB)
(1024 ZB)
(non del tutto esatto, stando al sistema metrico internazionale. Ma si tratta di cavilli…)
Somme tra numeri binari
Come per ogni altra base
0+0 = 0, 0+1 = 1, 1+0 = 1
1+1 = 0 col riporto di 1
1 1
1
1
1
1
1
1
001101010001101 +
010110100010011 =
100011110100000
Rappresentazione dei numeri negativi
Come posso codificare anche i numeri negativi?
Due possibili approcci:
Modulo
e segno
Complemento a due
Modulo e segno
Facciamo l’esempio di un byte (8 bit)
Il bit più significativo (quello più a sinistra) codifica
il segno: 0 significa +, 1 significa –
Gli altri 7 bit codificano il modulo del numero
Esempio:
00011011
= 27
10011011 = -27
Modulo e segno
Intervallo dei numeri rappresentabili con modulo e
segno: da 11111111 a 01111111 (da -127 a
Binario
Decimale
+127)
00000000
0
Problema: doppia rappresentazione
00000001
1
00000010
2
dello zero!
…
10000000
=-0
00000000 = +0
Problema: le somme non funzionano…
01111110
01111111
10000000
10000001
10000010
…
11111101
11111110
11111111
126
127
-0
-1
-2
-125
-126
-127
Complemento a due
Per rappresentare il numero –n…
Si parte dalla rappresentazione binaria di +n
Si fa il complemento a uno (ogni zero diventa uno, e
ogni uno diventa zero)
Si somma 1. Esempio su un byte:
27 = 000011011 complemento: 111100100
Questa è la rappresentazione
Sommo 1: 111100101
di -27 in complemento a due
Complemento a due
Binario
00000000
00000001
00000010
…
01111110
01111111
10000000
10000001
10000010
…
11111101
11111110
11111111
Decimale
0
1
2
126
127
-128
-127
-126
-3
-2
-1
Tutti i numeri negativi si riconoscono
immediatamente perché iniziano con un 1
Nessuna doppia rappresentazione dello 0
Intervallo: da -128 a +127
Grande vantaggio: le somme funzionano
anche con i numeri negativi!
Attenzione a non calcolare 127+1…
otterreste un overflow
Somme in complemento a due
-15 + 7
11110001 +
00000111 =
11111000
Per trasformare un numero in
complemento a due in decimale, si fa
nuovamente il complemento a uno e si
somma 1. Si converte il numero risultante
in decimale e si cambia di segno.
Quanto vale 11111000 ?
00000111 (complemento a uno)
00001000 (sommo 1)
Il risultato è -8
Ambiguità
Quanto vale in decimale il numero 11111111 ?
Risposta: dipende
Se è un numero senza segno, vale 255 Se è un numero in complemento a due, vale −1 Questa ambiguità è una delle principali cause di
disastri informatici! (assieme agli overflow visti
prima)
Codifica di dati non numerici
Se per un computer tutto è un numero binario, come
posso codificare dati non numerici?
Divido i dati da codificare in due gruppi, che
codifico rispettivamente con uno 0 e con un 1
Ripeto finché non ho definito una codifica per
ciascun elemento.
Esempio
Codificare i giorni della settimana
Codifica dei dati non numerici
Quante cifre binarie mi servono?
Sappiamo già che con k cifre possiamo
rappresentare 2 numeri binari differenti
Quindi, se il numero di oggetti da codificare è n,
dobbiamo avere che
2 ≥ $
Ovvero
% ≥ log $
Codifica alfanumerica
Per codificare i singoli caratteri di un testo scritto
occorrono almeno
Tutte
le lettere dell’alfabeto minuscole
Tutte le lettere dell’alfabeto maiuscole
Le 10 cifre decimali
I segni di interpunzione
In totale circa 100 elementi. Servono quindi almeno
7 bit per carattere (2! = 128)
Codifica alfanumerica
Codifica ASCII – 7 bit (128 caratteri)
Codifica ASCII estesa – 8 bit (256 caratteri)
Usata
per rappresentare caratteri non presenti nella
codifica ASCII standard, come le lettere accentate.
Purtroppo la codifica estesa differisce da Paese a
Paese!
Codifica UNICODE – 21 bit (circa 1 milione di
caratteri). Sembra tanto, ma UNICODE punta a
codificare tutti i simboli di tutte le lingue. Si pensi
ad esempio al cinese…
Tabella ASCII
Scarica