Rappresentazione digitale dell'informazione

La rappresentazione attraverso '0' e '1' (attraverso cioè un sistema di codifica binaria, che utilizzi due sole cifre) ha un importante vantaggio: i dati binari sono facilmente rappresentabili (e manipolabili) all'interno di un computer.

Questa celletta corrisponde a un bit di informazione.

Un bit, infatti, non è altro che la quantità di informazione fornita dalla scelta fra due alternative diverse, considerate come egualmente probabili.

In effetti, l'uso in campo informatico del termine 'digitale' non si riferisce di norma solo al fatto che l'informazione è rappresentata in forma numerica, ma al fatto che è rappresentata in forma numerica sulla base di una codifica binaria, e dunque attraverso bit (il termine bit corrisponde alla contrazione dell'inglese binary digit, numero binario).

Rappresentare in forma binaria una qualsiasi informazione numerica è compito relativamente facile.

 

Rappresentazione binaria dei numeri decimali da 0 a 16

Numero decimale

Valore delle posizioni binarie

 

16

8

4

2

1

0

0

0

0

0

0

1

0

0

0

0

1

2

0

0

0

1

0

3

0

0

0

1

1

4

0

0

1

0

0

5

0

0

1

0

1

6

0

0

1

1

0

7

0

0

1

1

1

8

0

1

0

0

0

9

0

1

0

0

1

10

0

1

0

1

0

11

0

1

0

1

1

12

0

1

1

0

0

13

0

1

1

0

1

14

0

1

1

1

0

15

0

1

1

1

1

16

1

0

0

0

0

 

Nel caso dei numeri, infatti, non dobbiamo fare altro che passare da una notazione all'altra.

Codificare invece in formato binario una informazione di tipo testuale risulta più complesso. Tuttavia un testo non è altro che una successione di caratteri, e i caratteri di base – quelli compresi nell'alfabeto della lingua usata - sono in un numero che varia col variare delle lingue, ma che è comunque - almeno per le lingue basate sull'alfabeto latino - finito e piuttosto ristretto. E’ sufficiente allora stabilire una tabella di corrispondenza fra caratteri da un lato e numeri binari dall'altro. Dovremo ricordarci di includere fra i caratteri da codificare tutti quelli che vogliamo effettivamente differenziare in un testo scritto: se vogliamo poter distinguere fra lettere maiuscole e minuscole dovremo dunque inserirvi l'intero alfabeto sia maiuscolo che minuscolo, se vogliamo poter inserire nei nostri testi anche dei numeri decimali dovremo inserire le dieci cifre (0,1,2,3,4,5,6,7,8,9), se vogliamo poter utilizzare segni di interpunzione (punto, virgola, punto e virgola....) dovremo inserire i caratteri corrispondenti, e così via... senza dimenticare naturalmente di includere lo spazio per separare una parola dall'altra!

Una tabella di questo tipo si chiama tabella di codifica dei caratteri. Per molto tempo, la codifica di riferimento è stata la cosiddetta codifica ASCII (American Standard Code for Information Interchange; attenzione: si scrive ASCII ma si legge con la 'c' dura: 'aski').

Il codice ASCII
(caratteri alfanumerici e segni di interpunzione)

33

!

49

1

65

A

81

Q

97

a

113

q

34

"

50

2

66

B

82

R

98

b

114

r

35

#

51

3

67

C

83

S

99

c

115

s

36

$

52

4

68

D

84

T

100

d

116

t

37

%

53

5

69

E

85

U

101

e

117

u

38

&

54

6

70

F

86

V

102

f

118

v

39

'

55

7

71

G

87

W

103

g

119

w

40

(

56

8

72

H

88

X

104

h

120

x

41

)

57

9

73

I

89

Y

105

i

121

y

42

*

58

:

74

J

90

Z

106

j

122

z

43

+

59

;

75

K

91

[

107

k

123

{

44

,

60

<

76

L

92

\

108

l

124

|

45

-

61

=

77

M

93

]

109

m

125

}

46

.

62

>

78

N

94

^

110

n

126

~

47

/

63

?

79

O

95

_

111

o

127

_

48

0

64

@

80

P

96

`

112

p

 

 

La codifica ASCII originaria (ASCII stretto) permetteva di distinguere 128 caratteri diversi; la tabella di caratteri attualmente più usata, denominata ISO Latin 1, distingue 256 caratteri, i primi 128 dei quali sono 'ereditati' dall'ASCII stretto. L'indicazione ISO indica l'approvazione da parte dell'International Standardization e 'Latin 1' indica che si tratta della tabella di riferimento per gli alfabeti di tipo latino. È questa la codifica di caratteri utilizzata dalla maggior parte dei sistemi operativi (Windows, Macintosh...). Come ogni tabella di codifica dei caratteri, anche la tabella ISO Latin 1 codifica i caratteri da essa previsti (che come si è accennato sono 256) facendo corrispondere a ciascuno un numero binario. Il primo di questi caratteri corrisponderà al numero binario '00000000', il secondo al numero binario '00000001', il terzo al numero binario '00000010', e così via, fino al duecentocinquantaseiesimo, che corrisponderà al numero binario '11111111'.

Questi numeri sono tutti espressi attraverso una notazione 'lunga' esattamente otto cifre binarie, ovvero 8 bit. In sostanza, possiamo 'scriverlo' utilizzando otto cellette affiancate, in ciascuna delle quali può esserci uno '0' o un '1' (nel caso considerato, le cellette conterranno tutte degli '1').

Le otto cellette possono quindi essere usate come 'contenitore' per rappresentare - in formato binario - un qualunque carattere della tavola di codifica: ci si dovrà solo ricordare, se il numero binario che codifica un determinato carattere è più 'corto' di otto cifre, di farlo precedere da tanti '0' quante sono le cellette rimaste vuote. Così, ad esempio, per rappresentare il carattere corrispondente al numero binario '10' si riempiranno le cellette in questo modo: '00000010'.

Riassumendo: 8 bit possono differenziare fra 256 combinazioni diverse, e dunque una 'parola' lunga 8 bit (otto cellette) può rappresentare, attraverso la sua particolare combinazione di '0' e '1', uno qualunque dei 256 caratteri della nostra tavola di codifica.

Per convenzione, una 'parola' lunga 8 bit è chiamata byte.

Il byte è dunque una unità di misura dell'informazione, e indica la quantità di informazione corrispondente alla scelta fra 256 alternative diverse. Se adottiamo come base per la nostra codifica dei testi una tavola comprendente 256 caratteri, ogni carattere del nostro testo richiederà un byte per essere codificato: in altri termini, 'costerà' un byte.

E’ interessante sottolineare che avendo a disposizione 256 caratteri, il codice ISO Latin 1 non può tuttavia essere veramente 'universale'; si pensi  infatti all'immensa varietà di caratteri utilizzati dalle lingue basate su alfabeti diversi da quello latino: dal greco al cirillico, dal giapponese al mandarino… Proprio per questo motivo, è stato avviato un progetto estremamente ambizioso: definire una tavola di codifica basata non su 7 o su 8 bit, ma su ben 16 bit, che consentono oltre 65.000 (per l'esattezza, 65.536) diverse combinazioni di '0' e '1', e permettono dunque di codificare oltre 65.000 caratteri. Questa tavola si chiama Unicode, comprende finora (versione 2.0) 38.885 caratteri, e rappresenta uno sforzo immenso di sistematizzazione non solo dal punto di vista informatico, ma anche da quello linguistico.

Rappresentare le immagini e i suoni

Il testo scritto è costruito combinando fra loro unità discrete (i singoli caratteri) scelte all'interno di un alfabeto abbastanza limitato. Ma immagini e suoni sono fenomeni che sembrano intrinsecamente analogici, nei quali cioè abbiamo a che fare con sfumature continue.

Se si ha a che fare con un numero finito, prefissato e non troppo grande di entità discrete, la codifica numerica è in fondo facile: basta contare le diverse entità discrete che possono presentarsi, e attribuire a ciascuna un numero che la rappresenti nella codifica. Ma come si opera con le infinite differenze e sfumature di un'immagine o di un suono?

Per capire in che modo il problema sia stato risolto, partiamo da un'osservazione pratica. Abbiamo tutti familiarità con la televisione, che è uno strumento per visualizzare immagini in movimento (per adesso, mettiamo da parte i suoni). Quando guardiamo la televisione, le immagini che vediamo ci appaiono di norma abbastanza facili da interpretare: possiamo identificare forme e strutture, e ad esempio riconoscere il volto di un attore o di un'attrice. Se ci avviciniamo molto allo schermo, tuttavia, noteremo che quella che a una certa distanza ci era apparsa come un'immagine ben definita e continua si 'sgrana' in piccoli puntini luminosi e colorati (i cosiddetti pixel - termine inglese corrispondente alla contrazione di picture elements). L'immagine che vediamo è in realtà il risultato dell'integrazione dei tanti singoli 'segnali' luminosi emessi da ciascuno dei singoli pixel. La griglia di pixel è talmente fitta da darci un'impressione di continuità.

 

Per digitalizzare un'immagine, il primo passo è proprio quello di 'sovrapporre' all'immagine analogica (ad esempio una fotografia) una griglia fittissima di minuscole cellette. Ogni celletta sarà considerata come un punto dell'immagine, come un pixel. Naturalmente, a parità di immagine, più fitta è la griglia, più piccole saranno le cellette, e migliore sarà l'illusione di un'immagine continua.

 

In questo modo, abbiamo sostanzialmente 'scomposto' l'immagine in tanti puntini. Ma non abbiamo ancora risolto il problema della nostra codifica digitale. Per farlo, occorre un passo ulteriore: rappresentare i puntini attraverso numeri. Come procedere? L'idea di base è semplice: utilizzare anche qui una tavola di corrispondenza, che però questa volta, anziché far corrispondere numeri a caratteri, faccia corrispondere numeri a colori diversi, o a sfumature diverse di colore.

I primi personal computer con capacità grafiche, all'inizio degli anni '80, utilizzavano griglie molto larghe (i pixel sullo schermo del computer più che a minuscoli puntini corrispondevano a grossi quadrati) e i colori codificati erano molto pochi (solo il bianco e nero, o al più 8 o 16 colori diversi

Se abbiamo a disposizione un numero maggiore di bit, potremo rendere più fine la griglia, oppure aumentare il numero dei colori, o magari (se possiamo permettercelo) fare tutte e due le cose insieme. Così, se ad esempio per ogni celletta decidiamo di 'spendere' 8 bit (e dunque 1 byte) anziché 1 bit soltanto, anziché usare solo il bianco e nero potremo codificare 256 colori diversi (giacché come abbiamo visto le possibili combinazioni di '0' e '1' nelle nostre 8 cellette sono proprio 256; quando si parla di immagini 'a 256 colori' o 'a 8 bit' ci si riferisce proprio a un'immagine la cui palette di colori - ovvero l'insieme dei colori utilizzati - è codificata in questo modo); se di bit ne possiamo spendere 16, avremo a disposizione 65.536 colori diversi, e così via. Certo, con l'aumento della risoluzione e la crescita del numero dei colori codificati, il numero di bit necessario a rappresentare la nostra immagine sale molto: supponiamo di voler utilizzare una griglia di 800 colonne per 600 righe (è una risoluzione assai diffusa per i personal computer), e di destinare a ogni celletta, a ogni pixel, 24 bit (il che ci consentirà di distinguere la bellezza di oltre 16 milioni di sfumature di colore). I bit necessari per rappresentare una singola immagine diventano 800x600x24 = 11.520.000!

Nel caso dei suoni, invece, la trasformazione del dato analogico in dato digitale si basa su un processo di 'segmentazione' dell'onda sonora di partenza.

Con un procedimento non troppo dissimile da quello già considerato a proposito della grigliatura in pixel di una immagine, questa funzione può essere 'segmentata' in regioni abbastanza piccole da poter essere considerate come se si trattasse di singoli punti. Ognuno di questi punti sarà identificato dai suoi valori sugli assi del piano cartesiano, e questi valori, naturalmente, sono dei numeri: sappiamo dunque bene come rappresentarli attraverso una codifica binaria. Ecco allora che la successione di questi valori (assieme alle necessarie informazioni sullo spettro delle frequenze considerate e sulla 'frequenza di campionatura', che ci dicono in sostanza quanto è esteso lo spettro sonoro considerato e quanto è accurata la nostra segmentazione della funzione d'onda, ovvero quanto 'fitta' è la nostra griglia) ci fornisce quella rappresentazione numerica, e dunque quella digitalizzazione dell'onda sonora, che stavamo cercando. Naturalmente, un sonoro stereofonico ci imporrà di considerare separatamente le onde sonore dei due canali corrispondenti agli altoparlanti di destra e di sinistra.