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: