Le unità di informazione fondamentali dell'informatica sono il bit ed il byte. Il primo è una quantità che si può esprimere in due modi soli (si può dire che è una quantità dicotomica). A seconda del contesto può quindi valere vero o falso, acceso o spento e via dicendo. Se usiamo cifre per esprimere un bit questo può assumere solo i valori 0 od 1. Il byte è invece costituito da una sequenza di 8 bit.
Anche la parola è costituita da una sequenza di bit ma il loro numero è variabile e può dipendere dal tipo di dati che vi vengono rappresentati. Per numeri interi, numeri con la virgola, istruzioni etc. Usualmente le parole del computer hanno dimensioni che sono multipli di byte: 16, 32, 64, 128 bit.
È facile verificare che la quantità di oggetti numerabili con un certo numero di bits, per esempio n, è pari a 2n. Per esempio con un bit si possono rappresentare 21 numeri compresi fra 0 ed 1 mentre con un byte 28 numeri compresi fra 0 e 255.
Questo è un modo molto efficiente di memorizzare l'informazione: la quantità di oggetti che si possono contare aumenta enormemente con l'aumentare del numero di bit. Lo sapeva anche Dante Alighieri!
Nella seguente tabella riportiamo i numeri rappresentabili dato il numero di bit disponibili. Abbiamo visto che con 8 bit possiamo rappresentare numeri compresi fra 0 e 255 tuttavia è bene osservare che il concetto è generale e non concerne solo la rappresentazione di numeri. Infatti, più in generale possiamo parlare di numero di oggetti rappresentabili nel senso che ad ogni configurazione di bit possiamo pensare di associare un oggetto. Per esempio, questo è quello che si fa con la codifica ASCII ove ad ogni configurazione di bit in un byte corrisponde un simbolo; poiché i caratteri ASCII sono codificati in un byte possiamo rappresentare un numero massimo di 256 simboli.
Numero di bit | Numero di oggetti rappresentabili |
28 | 256 |
216 | 65536 |
232 | 4,294,967,296 |
264 | 1.8x1019 |
2128 | 3.4x1038 |
Per quantificare varie quantità di uso comune (per esempio capacità di memorizzazione dei dischi, velocità di trasferimento dei dati) il bit ed il byte sono ormai troppo piccoli. È quindi diventato usuale avvalersi di multipli, in modo analogo a quello che si fa con altre unità di misura. È usuale e conveniente utilizzare le potenze della base numerica in cui si lavora per definire i multipli delle unità di misura. Così accade che per esempio che per il chilogrammo 1 Kg = 103 gr = 1000 gr. I multipli delle unità di misura delle informazioni sono un po' diversi a causa del fatto che viene naturale lavorare con le potenze di due. Succede quindi che l'unità di misura che esprime il "migliaio di byte" non corrisponda esattamente a 1000 byte bensì alla potenza di 2 che più si avvicina a 1000 byte: 210=1024. Analogamente per gli altri multipli che riportiamo nella tabella seguente.
Multiplo di byte | Numero effettivo di byte |
KiloByte (KB) | 210 |
MegaByte (MB) | 220 |
GigaByte (GB) | 230 |
TeraByte (TB) | 240 |
PetaByte (PB) | 250 |
HexaByte (HB) | 260 |
ZettaByte (ZB) | 2^70 |
YottaByte (YB) | 2^80 |
Gli stessi multipli possono essere applicati ai bit ma si usa in tal caso la lettera "b" minuscola: Kb, Mb e via dicendo. È comune utilizzare questi multipli per le velocità di trasferimento dati. Per esempio le reti locali consentono oggi una velocità di trasferimento di 100 Mb/s, 100 MegaBit al secondo, o in alcuni casi di 1 Gb/s, 1 GigaBit al secondo.
I sistemi di numerazione presuppongono la determinazione di una base, che chiamiamo N. Per esempio nel sistema decimale N=10. In generale, un numero, per esempio di 4 cifre e che indichiamo con abcd, si esprime mediante la seguente espressione
aN3+bN2+cN1+d
dove le singole cifre a, b, c e d assumono N valori nell'intervallo 0,...,N-1.
Il nostro sistema decimale è quello indio-arabico ma non è l'unico ad essere stato utilizzato. I Babilionesi usavano un sistema sessagesimale in base N=60. I computer ragionano in termini del sistema binario (N=2). Gli informatici talvolta usano volentieri i sistemi ottale (N=8) o esadecimale (N=16) perché sono molto facilmente convertibili nel sistema binario.
L'esadecimale in particolare è comodo perchè sono previsti sedici simboli (0-9, A, B, C, D, E, F) per rappresentare valori che in "decimale" vanno da 0 a 15, e in binario da 0000 a 1111, come si vede bene nella tabella seguente:
Decimale |
Binario |
Esadecimale |
0 |
0000 | 0 |
1 |
0001 | 1 |
2 |
0010 | 2 |
3 | 0011 | 3 |
4 | 0100 | 4 |
5 | 0101 | 5 |
6 | 0110 | 6 |
7 | 0111 | 7 |
8 | 1000 | 8 |
9 | 1001 | 9 |
10 | 1010 | 10 |
11 | 1011 | 11 |
12 | 1100 | 12 |
13 | 1101 | 13 |
14 | 1110 | 14 |
15 | 1111 | 15 |
La codifica ASCII è l'ingrediente essenziale di qualsiasi testo. È tuttavia opportuno distinguere i testi scritti in semplice ASCII dagli altri. I testi scritti in ASCII non sono altro che una sequenza di byte ognuno dei quali rappresenta un simbolo alfanumerico secondo la tabella ASCII che abbiamo appena visto. Questo tipo di testo viene prodotto ed eventualmente modificato con i cosiddetti editori di testo. Alcuni esempi di editori di testo sono Edit nel sistema DOS, Notepad nel sistema Windows (Notepad è sempre disponibile in Windows, lo potete cercare nel menu avvio, programmi, accessori), Vi, Pico, Emacs nel sistema Linux; ve ne sono tantissimi altri. Sapete tuttavia che esistono molti altri programmi per la produzione di testi che sono comunemente noti come elaboratori di testo o word processor. Questi usano come ingrediente base il codice ASCII ma in realtà usano anche altre codifiche che servono a manipolare i testi e ad arricchirli esteticamente, cosa impossibile con i soli caratteri ASCII. Se per esempio scrivete un testo e lo salvate in un file con uno dei vari programmi Word disponibili, in quel file non vengono memorizzati solo i caratteri ASCII corrispondenti alle varie lettere e numeri che voi avete scritto bensì tante altre informazioni che descrivono il tipo di cartteri usati (si chiamano font: Courier, Time Roman, Helvetica e via dicendo), la loro dimensione, effetti speciali quali grassetto, corsivo, sottolineato e così via, modo in cui si presentano i paragrafi (rientro iniziale, spazio fra un paragrafo e l'altro ...), interlinea ed una miriade di altre possibili caratteristiche. Tutte queste informazioni che vanno oltre alla mera rappresentazione dei caratteri ASCII (che producono gli editori di testo) va sotto il nome di formattazione. Per inciso, questa formattazione non c'entra nulla con la formattazione che concerne lo schema logico di suddivisione della superficie di un disco magnetico. E' evidente che due file contenenti lo stesso identico testo, uno scritto con un editore di testo in caratteri ASCII semplici e l'altro scritto con un word processor (e quindi ``formattato''), hanno dimensioni molto diverse. Chiunque può fare un semplice esperimento scrivendo un testo semplicissimo, per esempio "pippo", prima con un editore di testo e poi con un word processor: troviamo che il file con i caratteri ASCII è lungo 5 byte (corripondenti ai 5 caratteri della parola "pippo") mentre quello formattato è lungo circa 20000 byte!
Essere coscienti di cosa si impiega per scrivere un testo è utile in funzione di quello che si vuole fare in seguito. La formattazione di un testo può essere estremamente utile per metterne in debito rilievo alcune parti ma a volte ci interessa esclusivamente il suo contenuto. In questo secondo caso l'abitudine di scrivere sempre tutto in modo formattato può condurre ad un'esagerata occupazione dello spazio su disco dove vengono memorizzati i file che contengon i testi. Oppure nel caso in cui i testi debbano essere trasmessi attraverso la rete si può causare un inutile sovraccarico della medesima. In questo senso è una cattiva abitudine quella di allegare qualsiasi cosa in modo formattato ai messaggi di posta elettronica anziché scrivere semplicemente il testo dentro al programma di posta elettronica: spedire pippo in ASCII anziché in modo formattato è 20000/5=4000 volte più veloce!
Questo tipo di riguardo nell'uso della rete prende il nome di netiquette. è un concetto che concerne la coscienza che si sta usando uno strumento che serve a tutti e che un uso accorto lo può rendere più efficiente per tutti, quindi alla fine anche per se stessi.
E' importante comunque capire che lo standard ASCII è appunto uno "standard", ossia una convenzione adottata per comodità e praticità; come spesso capita nell'informatica, c'è sempre qualcuno che fa a modo suo; in questo caso il "dissidente" è niente meno che IBM.
Negli anni 50-60 IBM (e i suoi concorrenti) non avevano alcuna intenzione di condividere gli standard, IBM anzi, godendo di un "quasi monopolio" tendeva a "imporre" i suoi criteri di codifica, sui quali però deteneva il Copyright in modo da poterli gestire e modificare a suo piacimento.
In quel periodo IBM aveva messo a punto la codifica EBCDIC (Extended Binary Code Data Interchange Code), una tabella di 256 caratteri associati alle sequenze di 8 bit.
La tabella EBCDIC era, all'epoca, una prerogativa e praticamente un esclusiva dei sistemi IBM, dai Mainframe ai Minicomputer (non esistevano ancora i Personal...) mentre la concorrenza si è sempre "appoggiata" allo standard ASCII fin da quando è stato definito.
EBCDIC sarebbe un pezzo da museo, se non fosse per il banale fatto che i sistemi Mainframe e Midframe IBM (quelli chiamati, adesso zSeries e iSeries), discendenti dagli storici sistemi S/360-S/370-S/34-S/38, utilizzano ancora questa codifica, e quindi i dati memorizzati nei DB su questi sistemi sono in EBCDIC.
Non si tratta di una questione banale o di poco conto: i Mainframe e i Midframe IBM sono tuttora saldamente in uso presso centinaia di migliaia di organizzazioni anche di rilevanza mondiale: Aziende, Banche, Ospedali, ecc.ecc.
Questo normalmente è quasi trasparente per gli "utenti finali", perchè i programmi che si occupano del trasferimento dati da un sistema di questo tipo ad un personal (o comunque ad un sistema "non EBCDIC") utilizzano delle "tavole di conversione" per "mappare" i caratteri da EBCDIC a ASCII e viceversa; peccato che qualche problemino si presenta per i famigerati caratteri "accentati" (àòèéìù) o speciali (§£$€) che, spesso, vengono interpretati male.