Come sono memorizzati i dati nel PC

3.1 I sistemi di numerazione

Come sono memorizzati i dati all'interno del PC? Come viene memorizzato il carattere 'a' oppure il carattere ';'? Occorre un sistema per rappresentare i dati al suo interno del computer. Il sistema piu' semplice che e' stato pensato dall'uomo a tale scopo e' il sistema di numerazione binario. Nel sistema di numerazione binario, qualsiasi cifra viene rappresentata dalla combinazione di 2 simboli: 0 e 1. Nel sistema decimale (sistema di numerazione inventato dagli arabi) le cifre sono rappresentate da 10 simboli diversi: 0, 1, 2, 3, 4, 5, 6, 7, 8 e 9. Forse perche' all'inizio l'uomo per contare usava le dita delle mani. Ma questi non sono gli unici sistemi di numerazione esistenti. Il sistema vigesimale dell'antico popolo dei Maya ad esempio, prevedeva 20 simboli diversi: le dieci dita delle mani piu' le dieci dita dei piedi: il primo simbolo (lo zero) era rappresentato da una conchiglia, mentre gli altri simboli prevedevano l'uso di punti e trattini. Il primo calcolatore della storia dell'uomo e' stato sicuramente la mano: 5 simboli diversi per effettuare calcoli. Con questi simboli gli egiziani riuscivano a contare fino a 9999. E' facile individuare un numero di oggetti inferiore a 5 senza fare calcoli, con un semplice colpo d'occhio, ma per un numero di oggetti maggiore occorre contare. Ecco perche' dalle dita delle mani e dei piedi si passo' ad una rappresentazione grafica delle quantita': trattini, punti ed altri simboli. Gia' l'uomo primitivo usava dei trattini per indicare ad esempio il numero di animali abbattuti. Le mani ed i piedi furono i primi strumenti di misura: un palmo indicava una misura ben precisa cosi' come un piede (ancora oggi in alcuni paesi vengono usati i piedi come unita' di misura di lunghezza). Successivamente l'uomo invento' l'abaco: forse il primo oggetto usato per effettuare calcoli. Con il passare dei secoli vennero create macchine meccaniche sempre piu' complesse fino ad arrivare alle macchine elettriche: nel 1890 l'ingegnere Herman Hollerit (che fondo' poi la societa' IBM) invento' la prima macchina con schede perforate: servi' all'ufficio censimenti americano per l'elaborazione delle schede del censimento. Su ogni scheda una serie di perforazioni rappresentava le risposte fornite da ogni persona al censimento (un po' come i nostri formulari da compilare a penna) il calcolatore era in grado di esaminare circa 800 schede al minuto.

3.2 Il sistema di numerazione binario

I calcolatori si avvalgono del sistema di numerazione binario per rappresentare i dati al loro interno. In pratica esiste un circuito elettronico che puo' avere due stati: 0 o 1. Un circuito a due stati puo' essere una lampadina, che puo' avere lo stato di acceso o lo stato di spento. Oppure un interruttore che puo' essere aperto o chiuso. Quando un interruttore e' aperto non passa la corrente (stato 0) mentre quando e' chiuso passa la corrente (stato 1). Nel sistema di numerazione binario (o sistema a base 2) a differenza del sistema di numerazione decimale (sistema a base 10) non servono 10 simboli diversi per rappresentare le cifre, ma ne bastano solo 2. Nel sistema decimale i 10 simboli sono infatti:

1 2 3 4 5 6 7 8 9 0

Ma potevano anche essere:

A B C D E F G H I L

oppure:

! " £ $ % & / ( ) =

poco importa. La cosa importante e' che qualsiasi cifra e' rappresentata da una combinazione di 10 simboli diversi dove ogni simbolo ha un significato ben preciso in base alla posizione che occupa.

  • 1 in prima posizione significa 1 unita'
  • ma 1 in seconda posizione significa 1 decina
  • in terza posizione significa 1 centinaio
  • in quarta 1 migliaio e cosi' via

Percio' 1000 significa 1 migliaio.

  • 2 in prima posizione significa 2 unita'
  • ma 2 in seconda posizione significa 2 decine
  • in terza posizione significa 2 centinaia
  • in quarta 2 migliaia e cosi' via

Percio' 200 significa 2 centinaia. 300 significa 3 centinaia e cosi' via.

Ad esempio 4527 significa 4 migliaia 5 centinaia 2 decine e 7 unita'. Ossia:

(4 x 1000) (5 x 100) (2 x 10) (7 x 1)

Ma poiche':

1 equivale a 10 elevato 0 (cioe' 10^0)
10 equivale a 10 elevato 1 (cioe' 10^1)
100 equivale a 10 elevato 2 (cioe' 10^2)
1000 equivale a 10 elevato 3 (cioe' 10^3)

il numero 4527 si potrebbe anche scrivere cosi':

(4 x 10^3) (5 x 10^2) (2 x 10^1) (7 x 10^0)

partendo da destra verso sinistra la posizione indica l'esponente a cui deve essere elevato il numero 10. Facendo un altro esempio, il numero 87325 corrisponde al:

(8 x 10^4) (7 x 10^3) (3 x 10^2) (2 x 10^1) (5 x 10^0)

Generalizzando, qualsiasi numero decimale (cioe' a base 10) si puo' scrivere usando la formula:

n x 10^(p-1) n x 10^(p-1) n x 10^(p-1) ... etc

Dove n e' la cifra e p e' la sua posizione all'interno del numero.

Nel numero precedente (87325) 8 ad esempio occupa la 5a posizione partendo da destra (cioe' p=5) mentre 7 occupa la quarta posizione (p=4), 3 occupa la 3a posizione (p=3) e cosi' via. Infatti sostituendo n con 8 e p con 5 avremo:

8 x 10^(5-1)

ossia 8 x 10^4

ossia 8 x 10000, cioe' ottantamila. Se consideriamo invece 3 avremo:

3 x 10^(3-1)

ossia 3 x 10^2

ossia 3 x 100, cioe' trecento.

Ma la formula:

n x 10^(p-1) n x 10^(p-1) n x 10^(p-1) ... etc

non e' valida unicamente per il sistema decimale, in quanto puo' essere usata in qualsiasi sistema semplicemente cambiando base. Se infatti al posto di 10 usiamo 2 avremo una formula valida per il sistema binario (cioe' il sistema a base 2):

n x 2^(p-1) n x 2^(p-1) n x 2^(p-1) ... etc

Per il sistema ternario (3 simboli diversi) avremo:

n x 3^(p-1) n x 3^(p-1) n x 3^(p-1) ... etc

Per il sistema quaternario (4 simboli diversi) avremo:

n x 4^(p-1) n x 4^(p-1) n x 4^(p-1) ... etc

E cosi' via. Ma vediamo il sistema binario (2 simboli diversi), quello utilizzato dai calcolatori:

n x 2^(p-1) n x 2^(p-1) n x 2^(p-1) ... etc

Nel sistema binario:

0 equivale a 0
1 equivale a 1
10 equivale a 2
11 equivale a 3
100 equivale a 4
101 equivale a 5
110 equivale a 6
111 equivale a 7
1000 equivale a 8
1001 equivale a 9
1010 equivale a 10
1011 equivale a 11
1100 equivale a 12
1101 equivale a 13
1110 equivale a 14
1111 equivale a 15

Infatti considerando ad esempio 1101, applicando la formula vista prima avremo:

(1 x 2^3) (1 x 2^2) (0 x 2^1) (1 x 2^0) cioe':

(1 x 8) (1 x 4) (0 x 2) (1 x 1) cioe':

8 4 0 1 cioe' 13

Ecco che il numero 1101 equivale a 13. Solo che per rappresentare 13 nel sistema decimale occorrono 10 simboli diversi tra i qual se ne prendono due (1 e 3) mentre nel sistema binario si usano sempre e solo 2 simboli diversi, 0 e 1. Tornando all'esempio della lampadina, adottando la numerazione binaria e' facile rappresentare dei numeri con delle lampadine, perche' nel caso del numero 13 (1101 in binario) servono 4 lampadine: 3 accese (il simbolo 1) ed una spenta (il simbolo 0). Usando il sistema decimale occorrerebbe un oggetto che possiede 10 stati diversi e la lampadina non andrebbe piu' bene (ne ha solo 2: accesa o spenta).

Il numero binario:

10011010011

equivale al numero decimale 1235 (4 simboli diversi: 1, 2, 3 e 5) ed e' rappresentabile da una serie di 11 lampadine alcune accese altre spente. Si comincia ad intravedere come vengano rappresentati i numeri all'interno del calcolatore. Esistono delle lampadinde microscopiche che costituiscono la memoria del calcolatore. Possiamo percio' immaginare la memoria del calcolatore come un grande tabellone composto da migliaia di lampadine che possono essere alcune accese altre spente. In realta' non si tratta di lampadine ma di circuiti elettronici dove puo' esserci corrente oppure no: se e' presente corrente si sta rappresentando lo stato 1 se viceversa non e' presente corrente si sta rappresentando lo stato 0. Questa e' l'informazione elementare piu' piccola che e' trattata dai calcolatori. E' un valore che puo' essere 0 o 1. Questa informazione viene chiamata bit (e' una contrazione dell'inglese BInary digiT cioe' cifra binaria). Il bit e' appunto l'unita' di informazione piu' elementare. La lampadina della metafora usata fino ad ora e' il bit (accesa=1, spenta=0). Per rappresentare percio' il numero 1235 come abbiamo visto prima occorrono 11 lampadine ossia 11 bit. Considerando nuovamente la tabella:

0 equivale a 0
1 equivale a 1
10 equivale a 2
11 equivale a 3 (massimo rappresentabile con 2 bit)
100 equivale a 4
101 equivale a 5
110 equivale a 6
111 equivale a 7 (massimo rappresentabile con 3 bit)
1000 equivale a 8
1001 equivale a 9
1010 equivale a 10
1011 equivale a 11
1100 equivale a 12
1101 equivale a 13
1110 equivale a 14
1111 equivale a 15 (massimo rappresentabile con 4 bit)

vediamo che con 2 bit (2 lampadine), sfruttando tutte le combinazioni possibili possiamo rappresentare un numero non superiore a 3 (11 in binario). Con 3 bit possiamo al massimo rappresentare il numero 7 (111 in binario), con 4 bit il numero 15 e via dicendo. Possiamo cioe' rappresentare al massimo:

(2^n) - 1

dove n e' il numero di bit (lampadine) usati. Infatti:

2 bit = (2^2) - 1 cioe' 4 - 1 ossia 3

3 bit = (2^3) - 1 cioe' 8 - 1 ossia 7

4 bit = (2^4) - 1 cioe' 16 - 1 ossia 15

Con 8 bit possiamo percio' rappresentare al massimo:

8 bit = (2^8) - 1 cioe' 256 - 1 ossia 255 valori diversi.

3.3 La codifica ASCII

8 bit non sono un valore casuale, in quanto 8 bit rappresentano un byte ed 1 byte rappresenta un carattere. Il carattere 'A' ad esempio, viene rappresentato in memoria usando 1 byte. Percio' per rappresentare la parola 'CIAO' occorrono 4 byte. Ma fino ad ora abbiamo visto come rappresentare dei numeri all'interno della memoria del calcolatore: non abbiamo detto nulla su come vengano rappresentati tutti gli altri simboli come le lettere alfabetiche i caratteri di interpunzione e i caratteri speciali. Per rappresentare tutti i simboli visibili nella tastiera (e anche quelli non presenti nella tastiera), sono state create delle codifiche. Le piu' importanti sono 2, la codifica EBCDIC e la codifica ASCII. Escludendo la codifica EBCDIC che riguarda il mondo dei grossi calcolatori, vediamo la codifica ASCII che al contrario riguarda il mondo dei PC. ASCII sta per American Standard Code for Information Interchange (cioe' piu' o meno codifica americana standard per l'interscambio delle informazioni) ed e' una codifica usata in tutti i PC per rappresentare i vari simboli in corrispondenti valori binari. Ad esempio, secondo questa codifica il simbolo '0' e' rappresentato dal numero binario 110000 mentre il simbolo 'a' e' rappresentato dal numero binario 1100001. Attenzione perche' il simbolo 'a' ed il simbolo 'A' sono due cose ben diverse, infatti il simbolo 'A' e' rappresentato dal numero binario 1000001. E' possibile ottenere una tabella ASCII presso il sito http://www.asciitable.com. La tabella ASCII originariamente usava 7 bit (permettendo percio' una codifica di 127 simboli diversi al massimo). Successivamente venne portata a 8 bit (tabella ASCII estesa) permettendo di codificare fino a 255 caratteri diversi. La tabella ASCII universale e' quella standard a 7 bit (127 simboli) mentre esistono svariate tabelle ASCII estese a 8 bit (255 simboli) in base alla nazionalita' (nell'alfabeto americano ad esempio non sono presenti le lettere accentate, mentre altri paesi hanno altri simboli diversi come quelli cirillici e cosi' via). Ecco un elenco dei valori binari e del corrispondente simbolo secondo la codifica ASCII standard:

I primi simboli sono simboli di controllo non visualizzabili, seguono alcuni caratteri speciali, poi le cifre, lettere dell'alfabeto maiuscole ed infine le lettere minuscole. Come e' possibile notare, non e' molto facile ricordare una sequenza di 0 ed 1. Il simbolo Q ad esempio, corrisponde alla sequenza 01010001. La parola CIAO e' formata da 4 sequenze di 0 ed 1: 01100011, 01101001, 01100001 e 01101111. In altre parole per scrivere CIAO in binario occorre scrivere: 01100011011010010110000101101111. Ogni 0 od 1 e' un bit. Essendo questa la tabella ASCII standard (cioe' a 7 bit) il primo bit a sinistra sara' sempre zero ma considerando la codifica ASCII standard e quella estesa insieme, verranno utilizzati tutti gli 8 bit.

3.4 Il sistema di numerazione esadecimale

Come abbiamo visto 8 bit equivalgono ad un byte che, come dicevamo, rappresenta un carattere (per carattere si intende qualsiasi cifra, lettera, simbolo). Questo e' un linguaggio da calcolatori ma non troppo adatto agli umani! Ecco perche' e' stato adottato un sistema di numerazione intermedio: il sistema di numerazione esadecimale (o a base 16). Il sistema di numerazione esadecimale e' composto da 16 simboli:

0 1 2 3 4 5 6 7 8 9 A B C D E F

Secondo tale sistema la cifra decimale 10 (in binario 1010) viene rappresentata in esadecimale dal simbolo A, mentre la cifra decimale 11 equivale a B, 12 a C, 13 a D , 14 a E e 15 ad F. La cifra decimale 16 in esadecimale corrisponde a 10, mentre la cifra decimale 26 corrisponde alla cifra esadecimale 1A. La formula da adottare e' sempre la stessa che e' stata usata per il sistema decimale e per quello binario, solo che questa volta la base da considerare non sara' ne' 10 ne' 2 ma 16. Pertanto la formula sara':

n x 16^(p-1) n x 16^(p-1) n x 16^(p-1) ... etc

Applicando la formula il numero 10 esadecimale corrispondera':

1 x 16^(1) 0 x 16^0 cioe' 1 x 16 0 x 1 cioe' 16 (decimale)

Il numero 1A esadecimale corrispondera':

1 x 16^(1) A x 16^0 cioe' 1 x 16 A x 1 cioe' 16 A

Poiche' A corrisponde a 10 avremo 16 10 = 26 (decimale). La corrispondenza tra binario, decimale ed esadecimale per i primi 15 numeri e':

Binario Decimale Esadecimale
     
0 0 0
1 1 1
10 2 2
11 3 3
100 4 4
101 5 5
110 6 6
111 7 7
1000 8 8
1001 9 9
1010 10 A
1011 11 B
1100 12 C
1101 13 D
1110 14 E
1111 15 F

Considerando un simbolo qualsiasi pertanto, occorrera' un byte per memorizzarlo ossia 8 bit, che sono appunto gli 8 bit della codifica ASCII appena vista. Ma dividendo gli 8 bit in due parti da 4 ciascuna, trasformare un numero binario in esadecimale sara' semplicissimo. E' sufficiente imparare a memoria la tabella qui sopra. Conoscendo questa tabella infatti qualsiasi numero binario da 8 bit una volta diviso in 2 diventera' facilmente gestibile. Ad esempio il numero 11111111 diventa:

1111 1111

ossia:

FF

infatti 1111 corrisponde ad F. Il numero 10101010 sara':

1010 1010

cioe':

AA

il numero 10011100 sara':

1001 1100 cioe':

9C

E' evidente che 9C e' molto piu' facile da ricordare di 10011100. Nell'esempio visto prima infatti, la parola CIAO corrisponde a 01100011011010010110000101101111 in binario ma anche a 63 69 61 6F in esadecimale.

Inizio della guida  Il computer  Indice  La comunicazione uomo/machina

Copyright (c) 2002-2003 Maurizio Silvestri