Rappresentazione dell'informazione

 

Informazione = Significato, Contenuto

 

L'elaboratore elettronico tratta informazione.

L'elaboratore elettronico è in grado di agire su numeri con operazioni di tipo

Perciò tutte le informazioni sono codificate in forma numerica..

 

Dentro a un calcolatore, le informazioni sono costituite da unità elementari, dette parole o word.

Ogni architettura di calcolatore (ogni "famiglia" di macchine) ha parole di una data dimensione.

Questa dimensione dipende dalla struttura dei circuiti di memorizzazione (memoria, registri), di trasferimento (bus) e di trattamento (CPU) delle informazioni.

 

Le dimensioni delle parole si misurano in byte.

Una parola può essere lunga da 1 a 4 o più byte. 4 byte è normale.

 

1 byte è costituito da 8 bit, cioè 8 cifre binarie (binary digit).

(C'è stato un tempo in cui anche i bit in un byte potevano essere 6, 7, o 9, ...)

Una cifra binaria è un numero intero in base 2, ossia che va da 0 a 1.

Cioè, in pratica, può solo valere o 0 oppure 1.

 

Un numero espresso in base A con N cifre può rappresentare AN valori distinti.

Un byte (numero binario a 8 cifre) può quindi può rappresentare numeri binari tra 0 e 28 – 1 = 255

(in informatica si conta sempre partendo da zero).

 

Questa è una tabella completa di corrispondenze tra numeri in base dieci e gli stessi in base due, tra 0 e 127. Per avere i valori tra 128 e 255, occorre sommare 128 alla forma decimale. Nella forma binaria invece cambia solo la prima cifra (che qui è zero e tra 128 e 255 è invece uno).

 

Decimale Binario

Decimale Binario

Decimale Binario

Decimale Binario

000 00000000

001 00000001

002 00000010

003 00000011

004 00000100

005 00000101

006 00000110

007 00000111

008 00001000

009 00001001

010 00001010

011 00001011

012 00001100

013 00001101

014 00001110

015 00001111

016 00010000

017 00010001

018 00010010

019 00010011

020 00010100

021 00010101

022 00010110

023 00010111

024 00011000

025 00011001

026 00011010

027 00011011

028 00011100

029 00011101

030 00011110

031 00011111

032 00100000

033 00100001

034 00100010

035 00100011

036 00100100

037 00100101

038 00100110

039 00100111

040 00101000

041 00101001

042 00101010

043 00101011

044 00101100

045 00101101

046 00101110

047 00101111

048 00110000

049 00110001

050 00110010

051 00110011

052 00110100

053 00110101

054 00110110

055 00110111

056 00111000

057 00111001

058 00111010

059 00111011

060 00111100

061 00111101

062 00111110

063 00111111

064 01000000

065 01000001

066 01000010

067 01000011

068 01000100

069 01000101

070 01000110

071 01000111

072 01001000

073 01001001

074 01001010

075 01001011

076 01001100

077 01001101

078 01001110

079 01001111

080 01010000

081 01010001

082 01010010

083 01010011

084 01010100

085 01010101

086 01010110

087 01011111

088 01011000

089 01011001

090 01011010

091 01011011

092 01011100

093 01011101

094 01011110

095 01011111

096 01100000

097 01100001

098 01100010

099 01100011

100 01100100

101 01100101

102 01100110

103 01100111

104 01101000

105 01101001

106 01101010

107 01101011

108 01101100

109 01101101

110 01101110

111 01101111

112 01110000

113 01110001

114 01110010

115 01110011

116 01110100

117 01110101

118 01110110

119 01110111

120 01111000

121 01111001

122 01111010

123 01111011

124 01111100

125 01111101

126 01111110

127 01111111

 

La ragione per inventare il byte e tenerlo distinto dalla parola è che:

 

Quindi le informazioni memorizzate o scambiate si organizzano semplicemente in byte.

La macchina che le trasmette e la macchina che le riceve concorderanno una convenzione per recuperare le informazioni nello stesso modo in cui sono state create.

 

Come si rappresenta l'informazione

 

L'elaboratore tratta essenzialmente i seguenti tipi di dati:

Informazione testuale: testo

Informazione numerica: valori numerici interi/reali

 

1 INFORMAZIONI TESTUALI

Il byte è stato inventato come un gruppo di bit sufficienti a rappresentare un carattere.

I caratteri dell'alfabeto inglese sono 26, quindi come minimo un byte deve consentire 26 codici distinti.

Per fare questo non basterebbe un byte di 4 bit (24 = 16), ma uno di 5 bit basterebbe (25 = 32 > 26)

 

In realtà, rappresentare solo i caratteri dell'alfabeto è limitativo.

Vorrei poter rappresentare anche le cifre.

Vorrei poter rappresentare anche la punteggiatura.

Vorrei poter rappresentare anche qualche simbolo (p.es. aritmetici).

Vorrei poter aggiungere "caratteri" speciali che marchino p.es. la fine di una riga, l'inizio e la fine di una trasmissione, e svolgano altre funzioni di controllo.

Vorrei anche il lusso di distinguere le 26 lettere in maiuscolo dalle stesse 26 lettere in minuscolo.

 

Una specie di "alfabeto esteso" di questo tipo è il codice ASCII

American Standard Code for Information Interchange.

 

Il codice ASCII è un esempio di convenzione per il trasferimento dell'informazione fra architetture di calcolatori differenti.

 

Nel seguito è presentata la tabella ASCII completa. I codici sono 127 in modo da poter essere usati con vecchi byte di 7 bit.

I primi 32 codici si riferiscono a "caratteri" non stampabili ma usati per il controllo della trasmissione (i "caratteri di controllo"). Il loro nome è riportato nella tabella, e una breve spiegazione è riportata in coda alla tabella.

 

Si può notare che, oltre al codice in base 10, sono riportati i codici in base 8 (ottale/octal, "oct") e 16 (esadecimale/hexadecimal, "hex"). Il motivo per usare queste basi è che:

La conversione tra la base 2 e le basi potenze di 2 (4, 8, 16...) è quindi velocissima, perché si può fare per gruppi di cifre, anziché solo per valore totale.

Inoltre, se un byte è di 8 bit e uso la base 16, mi servono solo 2 cifre per rappresentare qualunque valore, quindi la scrittura è molto più compatta.

 

BASE 2 B7 B6 B5 B4 B3 B2 B1 B0

----------- -----------

BASE 16 H1 H0

 

Esempio:

BASE 10 71

BASE 2 0 1 0 0 0 1 1 1

---------- ----------

BASE 16 4 7

 

 

 

ASCII TABLE

-----------

 

Dec Hex Oct Char Dec Hex Oct Char Dec Hex Oct Char Dec Hex Oct Char

-----------------------------------------------------------------------

0 00 000 NUL 32 20 040 SPace 64 40 100 @ 96 60 140 `

1 01 001 SOH 33 21 041 ! 65 41 101 A 97 61 141 a

2 02 002 STX 34 22 042 " 66 42 102 B 98 62 142 b

3 03 003 ETX 35 23 043 # 67 43 103 C 99 63 143 c

4 04 004 EOT 36 24 044 $ 68 44 104 D 100 64 144 d

5 05 005 ENQ 37 25 045 % 69 45 105 E 101 65 145 e

6 06 006 ACK 38 26 046 & 70 46 106 F 102 66 146 f

7 07 007 BEL 39 27 047 ' 71 47 107 G 103 67 147 g

 

8 08 010 BS 40 28 050 ( 72 48 110 H 104 68 150 h

9 09 011 HT 41 29 051 ) 73 49 111 I 105 69 151 i

10 0A 012 LF 42 2A 052 * 74 4A 112 J 106 6A 152 j

11 0B 013 VT 43 2B 053 + 75 4B 113 K 107 6B 153 k

12 0C 014 FF 44 2C 054 , 76 4C 114 L 108 6C 154 l

13 0D 015 CR 45 2D 055 - 77 4D 115 M 109 6D 155 m

14 0E 016 SO 46 2E 056 . 78 4E 116 N 110 6E 156 n

15 0F 017 SI 47 2F 057 / 79 4F 117 O 111 6F 157 o

 

16 10 020 DLE 48 30 060 0 80 50 120 P 112 70 160 p

17 11 021 DC1 49 31 061 1 81 51 121 Q 113 71 161 q

18 12 022 DC2 50 32 062 2 82 52 122 R 114 72 162 r

19 13 023 DC3 51 33 063 3 83 53 123 S 115 73 163 s

20 14 024 DC4 52 34 064 4 84 54 124 T 116 74 164 t

21 15 025 NAK 53 35 065 5 85 55 125 U 117 75 165 u

22 16 026 SYN 54 36 066 6 86 56 126 V 118 76 166 v

23 17 027 ETB 55 37 067 7 87 57 127 W 119 77 167 w

 

24 18 030 CAN 56 38 070 8 88 58 130 X 120 78 170 x

25 19 031 EM 57 39 071 9 89 59 131 Y 121 79 171 y

26 1A 032 SUB 58 3A 072 : 90 5A 132 Z 122 7A 172 z

27 1B 033 ESC 59 3B 073 ; 91 5B 133 [ 123 7B 173 {

28 1C 034 FS 60 3C 074 < 92 5C 134 \ 124 7C 174 |

29 1D 035 GS 61 3D 075 = 93 5D 135 ] 125 7D 175 }

30 1E 036 RS 62 3E 076 > 94 5E 136 ^ 126 7E 176 ~

31 1F 037 US 63 3F 077 ? 95 5F 137 _ 127 7F 177 DEL

 

 

ASCII CONTROL CHARACTER ABBREVIATIONS

-------------------------------------

 

NUL null SOH start of heading

STX start of text ETX end of text

EOT end of transmission ENQ enquiry

ACK acknowledge BEL bell

 

BS backspace HT horizontal tabulation

LF linefeed VT vertical tabulation

FF form feed CR carriage return

SO shift out SI shift in

 

DLE data link escape DC1 device control 1

DC2 device control 2 DC3 device control 3

DC4 device control 4 NAK negative acknowledge

SYN synchronous idle ETB end of transmission block

 

CAN cancel EM end of medium

SUB substitute ESC escape

FS file separator GS group separator

RS record separator US unit separator

DEL delete ETB end of transmission block

 

 

 

Questa tabella di codici è un po' antiquata, ma ancora usatissima come "minimo comune denominatore" fra architetture differenti.

Attualmente in uso sono almeno altre tre codifiche standard:

 

® Il codice caratteri ANSI

American National Standards Institute

L'ANSI è l'autore del codice ASCII; il codice ANSI è quindi un'estensione del codice ASCII che usa anche i codici da 127 a 255.

A questi codici esso fa corrispondere lettere accentate e con speciali simboli presenti negli alfabeti non inglesi.

Tutte le versioni di Windows usano il codice ANSI.

 

® I codici caratteri ISO

International Organisation for Standardisation

I codici ISO sono estensioni del codice ASCII, in cui la parte estesa può essere scelta tra molte alternative ("scripts") per adattarsi a varie lingue.

 

® Il codice caratteri Unicode

Codice che usa 2 byte anziché 1 (cioè 16 bit) per rappresentare caratteri in molti alfabeti, anche non occidentali (greco, arabo, cirillico, ecc).

Infatti con 16 bit posso rappresentare fino a 216 = 65536 possibili caratteri.

Le versioni di Windows con "tecnologia NT" (Windows NT e Windows 2000) usano i caratteri Unicode.

Questa scelta (fortemente appoggiata dalla Microsoft) non piace agli orientali perché i loro alfabeti non rientrano facilmente nello schema proposto. Altri schemi invece sono migliori da questo punto di vista, ma meno diffusi.

 

2 INFORMAZIONI NUMERICHE

Abbiamo visto come le parole possono contenere codici di caratteri.

Ovviamente una parola di calcolatore può essere interpretata, secondo necessità, come semplice valore numerico intero.

Se una parola è di 32 bit, i valori numerici rappresentabili possono essere 0 .. 232 – 1 = 4.294.967.295 (quattromiliardierotti).

Questo però implica solo valori positivi.

 

Se introduco anche il segno +/– , dovrò scegliere una convenzione per rappresentare i numeri negativi.

Il risultato finale è che di questi quattromiliardi di valori, duemiliardi saranno positivi e duemiliardi negativi.

 

Potrei anche desiderare di fare dei calcoli su numeri reali.

 

Per rappresentare i numeri reali si usa la forma esponenziale.

Dei bit che compongono la parola, alcuni vengono interpretati come mantissa, altri come esponente, Mantissa ed esponente sono valori interi con i loro segni, e vengono interpretati come segue:

 

P A R O L A

Mantissa

Esponente

segno

valore

segno

valore

bit 31

bit 30

bit 29

...

bit 21

bit 20

bit 19

bit 18

...

bit 0

 

Valore = Mantissa ´ 10 Esponente

 

(Esempio con parola a 32 bit)

 

Se la mantissa è positiva o negativa, il valore è rispettivamente positivo o negativo.

Se l'esponente è positivo o negativo, il valore è rispettivamente maggiore o minore di 1.

Quindi gli esponenti negativi caratterizzano i valori frazionari.

 

In questa forma è possibile rappresentare numeri in un intervallo molto più esteso che non con la forma intera.

L'altro lato della medaglia è che i dati estremi (molto grandi e molto piccoli) non si possono rappresentare con la stessa precisione di quelli intermedi. Posso scegliere tra precisione ed estensione, ma non posso pretendere entrambe.

 

L'unica via per aumentare la precisione rispetto all'esempio è usare rappresentazioni più estese:

 

Rappresentazione di informazioni complesse

 

Esistono informazioni che sono più sofisticate che non semplici sequenze di caratteri testuali o semplici gruppi di numeri.

 

Per esempio: dati multimediali. Per esempio: dati di programmi complessi (p.es. progettazione architettonica, il progetto di un'automobile, un corso on-line).

 

Queste informazioni sono rappresentate attraverso convenzioni ulteriori rispetto a quelle viste finora.

Spesso queste ulteriori convenzioni sono specifiche di un singolo programma (quindi solo lui può trattare un determinato tipo di informazioni).

 

Vediamo un tipo di dato complesso:

Le immagini

Sono segnali, cioè sono dati catturati da un sensore che rileva grandezze fisiche (la macchina fotografica, che rileva variazioni di luminosità e colore).

 

Una immagine viene digitalizzata. Cioè viene trasformata in una sequenza di numeri.

 

I numeri corrispondono ai livelli di luminosità misurati in molti punti dell'immagine:

L'immagine viene infatti divisa in quadrettini molto piccoli, approssimativamente puntiformi.

Per esempio, può essere divisa in una griglia di 500 x 500 puntini.

Ogni puntino si chiama pixel (picture element).

500 x 500 significa che avrò 500 righe composte di 500 pixel ciascuna.

 

Il livello di luminosità di ogni pixel viene misurato, rappresentato come un numero, e memorizzato in una sequenza prestabilita.

La sequenza più usata è la scansione raster (la stessa usata nei televisori):

...

 

Una caratteristica dei segnali è di essere sovrabbondanti.

Un modo tipico per trattare le immagini è quindi la compressione.

 

Comprimere un segnale significa rappresentarlo in una forma in cui si butta via dell'informazione. Esistono due tipi di compressione, corrispondenti a due tipi di informazione abolita:

compressione senza perdita: butta via dell'informazione che si può ricavare dai dati restanti (cioè informazione ridondante).

Un esempio di compressione senza perdita è: se incontro 10 pixel con livello di luminosità 112, anziché scrivere 10 volte il numero 112 scrivo solo i numeri 10 e 112.

Questo è possibile e vantaggioso per immagini create al calcolatore, cioè puramente artificiali, per le quali è possibile che ampie aree abbiano esattamente lo stesso colore.

Un tipo di compressione senza perdita si chiama GIF (graphics interchange format)

 

compressione con perdita: butta via dell'informazione che non si può ricavare dai dati restanti, ma che percettivamente è poco importante.

La compressione con perdita ha alcune caratteristiche che la differenziano da quella senza perdita:

Un esempio di compressione con perdita è: se ho un'immagine 500 x 500 e butto via una riga sì e una riga no, ottengo un'immagine più piccola; se replico le righe dispari e le metto in posizione pari ottengo ancora un'immagine 500 x 500, ma avendo memorizzato solo 250 x 500 valori.

Ovviamente bisogna vedere se percettivamente il risultato è ancora buono.

Un tipo di compressione senza perdita si chiama JPEG (joint photographic expert group)

 

Memorizzazione e trasmissione dell'informazione

 

Quando si tratta di archiviare da qualche parte un lavoro, oppure di trasmetterlo a qualche altro calcolatore, occorre organizzare i dati in modo diverso da come sono disposti in memoria.

Facciamo finta che parliamo solo di trasmissione, perché memorizzare vuol dire trasmettere un file da un calcolatore allo stesso calcolatore in un momento successivo.

 

Se la macchina che usa i dati deve poter cambiare, non si può più organizzarli in parole, perché le parole sono diverse da macchina a macchina.

L'organizzazione più naturale è la sequenza lineare di byte.

 

Una sequenza di byte scritta da qualche parte si chiama file.

 

Esistono due tipi fondamentali di file:

 

Un file di testo ASCII usa solo i codici ASCII.

Un file di testo si crea, si legge, si modifica con un programma chiamato text editor.

 

Un text editor prevede comandi di: