start
informazioni e calcolatori
Piero Gallo – Pasquale Sirsi
Competenze
nRiconoscere le tecniche di
rappresentazione dei dati all’interno
di un computer
nSviluppare capacità operative
in merito alla rappresentazione
di dati testuali, numerici
e multimediali
Abilità
nConvertire numeri decimali
in basi diverse
nOperare
con i numeri binari
nRappresentare i dati in standard
ASCII e UNICODE
nRappresentare i numeri interi e reali
secondo appositi standard
Architettura del computer
Il computer
Il computer tratta dati o informazioni?
Rappresentazione
delle informazioni
La memoria centrale e i bus
Il codice
Architettura della memoria centrale
Codifica e decodifica dell’informazione
La CPU (Central Processing Unit)
Rappresentazione delle informazioni
alfanumeriche
Linguaggio macchina
e formato delle istruzioni
L’esecuzione delle istruzioni
Le porte e le periferiche
nComprendere le tecniche grafiche
per immagini raster e vettoriali
nInquadrare le tecniche di
digitalizzazione audio e video
Conoscenze
nSistemi di numerazione
diversi dal decimale
nConversioni in basi diverse
nAritmetica binaria
nSegnali analogici e digitali
nRappresentazione di dati testuali,
numerici e multimediali
nStandard IEEE754 per
la codifica di numeri reali
nGrafica raster e vettoriale
nTecniche di compressione
di dati multimediali
nDigitalizzazione di immagini e video
Rappresentazione binaria
dei numeri
Rappresentazione
dei numeri reali
Le memorie di massa
Cache, supporti USB, dischi ottici
Codifica dell’informazione
multimediale
Aritmetica del computer
La codifica delle immagini
Come contavano i nostri antenati
I sistemi di compressione
Sistemi addizionali e sistemi posizionali
La compressione delle immagini
I sistemi di numerazione
decimale e binario
Grafica raster e grafica vettoriale
nComprendere il concetto
di dato multimediale
Codifica dell’informazione
numerica e alfanumerica
onversione da binario
C
a decimale e da decimale
a binario
ritmetica binaria:
A
somma e prodotto
ritmetica binaria:
A
sottrazione e divisione
Il sistema ottale
Il sistema esadecimale
I formati grafici delle immagini bitmap
Il formato JPEG e la geometria frattale
La grafica tridimensionale
e il rendering
L’audio digitale
I principali formati audio
Il video digitale
Storia dell’informatica
Dagli albori al 1822
Dall’Ottocento al Novecento
Dagli anni Cinquanta agli anni Settanta
Dagli anni Ottanta a oggi
Il computer
Prepariamoci a compiere un viaggio interessante: l’esplorazione del computer. Vedremo
come è composta questa macchina misteriosa e che cosa fanno i programmi una volta caricati su di essa. Prima di procedere, cerchiamo di capire che cos’è un computer.
Il computer o elaboratore è una macchina costituita da dispositivi di diversa natura
(meccanici, elettrici, ottici e così via) in grado di elaborare dati in modo automatico,
veloce, sicuro ed efficiente.
Le caratteristiche essenziali sono la rapidità e l’affidabilità. Chiariamo alcuni termini usati
nella definizione. Abbiamo detto che il computer:
• è una macchina, cioè un dispositivo privo di intelligenza autonoma, come l’automobile;
• è elettronico: il suo funzionamento si basa su componenti di tipo elettronico;
• è un elaboratore di dati: eseguendo le istruzioni di un programma, è capace di ricevere
dati dall’esterno, operare su di essi e fornire i risultati dell’elaborazione, sollevando così
l’uomo da compiti noiosi, ripetitivi e complessi.
Se vogliamo che il computer risolva un problema, quindi, dobbiamo fornirgli i dati su cui
lavorare e una sequenza ordinata di istruzioni (cioè il programma) che elabori i dati ricevuti
e fornisca i risultati.
DATI
RISULTATI
PROGRAMMI
Ne consegue che:
il computer è una macchina programmabile, cioè una macchina che può essere utilizzata per problemi diversi, in grado di interpretare ed eseguire una serie di ordini impartiti
dall’esterno.
Non dimentichiamo che il computer è una macchina. L’elaborazione dei dati avviene
eseguendo le istruzioni contenute nei programmi, attraverso le sue componenti fisiche.
Parleremo, quindi, di sistema di elaborazione per sottolineare il fatto che l’elaborazione
avviene grazie all’interazione di risorse diverse.
In questo corso di studi ci occupiamo del personal computer (o semplicemente PC), ossia di
un particolare tipo di macchina, molto utilizzata in ambito lavorativo e domestico.
2
START – INFORMAZIONI E CALCOLATORI
ARCHITETTURA DEL COMPUTER
Hardware e software
Un computer svolge i suoi compiti utilizzando le proprie risorse, che possono essere
raggruppate in due grandi categorie: hardware e software.
• Le risorse hardware sono la parte fisica del computer, cioè l’insieme delle componenti meccaniche, elettriche, elettroniche, magnetiche e ottiche. Il termine
inglese hardware, che letteralmente significa “ferramenta”, è composto da hard
che significa “duro” e ware che significa “componente”.
• Le risorse software sono, invece, la parte logica del computer, cioè l’insieme di
tutti i programmi che ci consentono di gestire il sistema. Il termine inglese software è composto da soft che significa “soffice” e ware che, come sappiamo, significa
“componente”.
Esistono anche dispositivi che sono sia hardware che software. Essi costituiscono il
firmware, che non possiamo definire una vera e propria categoria, bensì qualcosa
di intermedio fra hardware e software. Possiamo dire che il firmware è costituito
da una serie di istruzioni software memorizzate (cablate) all’interno di memorie
ROM (di cui parleremo in seguito) e non modificabili dall’utente. Probabilmente, il
firmware più conosciuto in campo informatico è quello della scheda madre, abitualmente chiamato BIOS e responsabile del corretto avviamento del computer.
La macchina di von Neumann
I moderni sistemi di elaborazione oggi in commercio non sono tutti uguali,
anzi presentano notevoli differenze in termini di velocità, prestazioni, memorie.
Nonostante questo, la maggior parte di essi presenta una caratteristica comune: il
loro hardware rispecchia il modello ideato da John von Neumann nel -1946, che
riportiamo nella seguente figura.
MEMORIA
CENTRALE
UNITÀ
DI INPUT
UNITÀ
DI OUTPUT
UNITÀ
CENTRALE
(CPU)
Secondo tale modello, un sistema per l’elaborazione elettronica dei dati è composto
da un insieme di unità funzionali, ognuna delle quali ha compiti ben precisi:
• le unità di input sono predisposte per l’immissione delle istruzioni dei programmi e dei dati su cui tali programmi dovranno operare;
• le unità di output permettono al sistema di comunicare con l’esterno, ossia di
comunicare i risultati dell’elaborazione compiuta;
• la memoria centrale conserva dati e istruzioni;
• l’unità centrale, detta CPU (Central Processing Unit), ha il compito di eseguire le
istruzioni, i calcoli aritmetici e logici e di controllare tutto il sistema.
La macchina di von Neumann era caratterizzata dalla presenza di una sola unità centrale: un computer basato su questo modello viene chiamato elaboratore seriale.
Esistono, poi, altre architetture di elaboratori (array processor, pipeline, multiprocessor
e così via) basate su altri modelli e utilizzate in settori specifici.
Prima di analizzare la macchina di von Neumann è doveroso fare una riflessione.
Parlando delle unità abbiamo spesso utilizzato il termine “dati”. Ma il computer
tratta dati o informazioni?
ARCHITETTURA DEL COMPUTER START – INFORMAZIONI E CALCOLATORI
3
Il computer tratta dati o informazioni?
I concetti di dato e di informazione sono da alcuni considerati diversi, da altri sovrapponibili. Per una nostra scelta didattica li considereremo diversi, in modo da rendere più
semplice l’approccio all’argomento.
Analizziamo dunque queste differenze, cominciando con un esempio.
Supponiamo che un insegnante, sfogliando il suo registro personale, trovi un foglio
sul quale è ripor­tato il simbolo 8. Le domande che si può porre sono le seguenti: “Che
cosa volevo indicare con que­sta cifra? Che cosa rappresenta? Può rappresentare un voto?
Oppure il numero di compiti che mi restano da correggere? O forse il numero delle interrogazioni?”. Le risposte possibili sono infinite. Attenzione però: se l’insegnante avesse
trovato la cifra 8 nella griglia di valutazione dello studente Rossi, non avrebbe esitato a
pensare: “Rappresenta il voto assegnato allo studente Rossi”.
Da questo esempio possiamo affermare che la cifra 8 rappresenta il dato e tutte le varie
ipotesi formulate dall’insegnante costituiscono le possibili interpretazioni relative a quel
dato.
Facciamo un altro esempio:
Supponiamo che, dopo una rapina in una gioielleria, un testimone vada dalla polizia e
dica: “Ho visto un rapinatore salire su un’automobile targata XXZZ”. Questo dato può
costituire un’infor­mazione se non si è già trovata l’automobile utilizzata nella rapina.
Consideriamo, invece, che lo stesso testimone vada dalla polizia e affermi: “XXZZ”. In
questo caso il poliziotto potrebbe chiede­re: “Cosa vuoi? Hai qualche problema? Cosa
vuoi dire con XXZZ?”.
È chiaro che un dato da solo non genera informazione, se non è evidente il suo significato.
Il dato, quindi, è una conoscenza elementare che, presa individualmente e fuori da
un preciso contesto, non ha alcun valore.
L’informazione, invece, è il dato elaborato, ossia l’incremento di conoscenza che
deriva dall’interpretazione di un dato.
Secondo questa distinzione, un dato diviene informazione solo quando viene esattamente interpretato. Di conseguenza, per essere ritenuto un’informazione, un dato deve essere
arricchito da indicazioni ausiliarie che permettano di attribuirgli un’interpretazione.
Tornando all’esempio precedente, il numero 8 non rappresenta per l’insegnante un’informazione importante. Può diventarlo soltanto se si attribuisce al numero un significato,
utilizzando una precisa chiave di interpretazione, così come accade per il poliziotto con
le lettere XXZZ.
INFORMAZIONE
DATI
4
START – INFORMAZIONI E CALCOLATORI
CONOSCENZA
ARCHITETTURA DEL COMPUTER
Il computer non interpreta i dati, non attribuisce loro significati precisi, come invece
fa la mente umana: per una macchina elettronica i dati sono soltanto semplici simboli! Per questo motivo possiamo affermare che:
il computer tratta i dati, l’uomo tratta le informazioni.
I dati si presentano alla nostra osservazione in varie forme:
• numeri (il peso di una persona, il voto di un compito in classe);
• caratteri alfabetici (il titolo di un film, il nome di un cane);
• caratteri alfanumerici (il numero di una targa, un codice fiscale, una parola chiave per accedere a un videogioco);
• immagini (una foto, un manifesto);
• grafici (un istogramma, una piantina topografica, un elettrocardiogramma);
• suoni (una sirena, l’allarme di un’auto, il suono della sveglia);
• luci (un semaforo, un faro);
• gesti (un saluto, un abbraccio, un bacio).
Numeri e caratteri sono dati semplici (o primitivi), perché sono relativamente semplici da raccogliere e analizzare; gli altri sono dati complessi, in quanto derivanti
dalla fusione di più dati semplici. In particolare, dati complessi quali suoni, animazioni, filmati prendono il nome di dati multimediali: di tale tipologia ci occuperemo
a lungo in questo corso, per la sua importanza nell’informatica dei nostri giorni.
L’attività che si occupa del trattamento dei dati per trasformarli in informazioni
prende il nome di elaborazione.
ELABORAZIONE
Raccolta
dei dati
Archiviazione
Produzione
di informazioni
Concentrandoci sulle nuove tecnologie informatiche e della comunicazione, è importante distinguere tra dati analogici e dati digitali.
Gli ultimi decenni hanno visto la nascita e lo sviluppo di nuovi dispositivi elettronici quali computer, computer tascabili, videogame che oggi affiancano in molte
famiglie radio, televisioni e videocamere. In ognuno di questi dispositivi i dati da
elaborare e trasmettere sono rappresentati fisicamente da segnali elettrici.
In un sistema analogico il segnale da elaborare è continuo: un orologio analogico,
quello con le lancette, rappresenta tutti gli istanti del tempo, senza salti.
In un sistema digitale i segnali da elaborare sono discreti,
cioè non assumono tutti i valori di un intervallo, ma procedono a salti: un orologio digitale rappresenta il tempo a salti
di minuti o di secondi, o anche di frazioni più piccole.
ARCHITETTURA DEL COMPUTER START – INFORMAZIONI E CALCOLATORI
5
La memoria centrale e i bus
La memoria centrale (detta anche memoria principale o memoria di lavoro) è un dispositivo
elettronico in grado di contenere tutte le informazioni necessarie per l’elaborazione (dati,
istruzioni del programma da eseguire, risultati intermedi e finali). È quindi coinvolta continuamente durante il processo di elaborazione.
In memoria è possibile:
• scrivere i dati provenienti dalle varie componenti del computer; la scrittura è un’operazione
distruttiva, ossia lo scrivere un’informazione comporta la distruzione di quella precedentemente contenuta nella stessa posizione;
• conservare informazioni, per averle sempre disponibili durante l’elaborazione;
• leggere l’informazione memorizzata, senza rischio di distruggerla; la lettura non è distruttiva, in quanto viene prelevata una copia dell’informazione letta.
Possiamo immaginare la memoria come un dispositivo composto da migliaia di circuiti elettrici, che possono assumere solo due stati fisici a cui si associano i simboli 0 e 1. Essi sono detti
cifre binarie o, semplicemente, bit (binary digit). La memoria centrale, quindi, è composta da
celle (o posizioni di memoria) adiacenti, di uguale dimensione, che possono contenere un dato
scritto in forma binaria.
Per rappresentare un carattere qualsiasi (cifra, lettera, simbolo e così via), però, un singolo bit
non basta; per questo si usano configurazioni di otto bit dette byte (binary term). Il byte assume
particolare importanza in quanto permette di rappresentare un carattere alfabetico, numerico
o un simbolo speciale. Pertanto, una parola di dieci lettere occupa dieci byte, una di quattro ne
occupa quattro e così via.
Il byte viene assunto come unità di misura della capacità della memoria. Per comodità si
usano spesso multipli del byte. La configurazione appena più grande del singolo byte prende
il nome di parola (o word) e riveste un ruolo di primaria importanza, in quanto la lunghezza
della parola (cioè il numero di bit di cui è composta) definisce la dimensione della cella standard di sistema.
Le parole sono composte da un numero di bit multiplo di otto (16, 32 o 64 bit) e in corrispondenza di ciò si parla di “sistemi a 16 bit”, “sistemi a 32 bit” e così via. Più alto è il numero di
bit che compongono la parola, maggiore è, in genere, la velocità del computer. Questo perché
nell’elaboratore il trasferimento delle informazioni tra la memoria centrale e la CPU avviene
in parallelo, ossia i bit che compongono una parola vengono trasmessi contemporaneamente. Usando parole più lunghe, diminuiscono gli accessi in memoria che la CPU deve eseguire
quando necessita di un determinato numero di bit, e conseguentemente aumenta la velocità del
computer. La tabella riportata qui mostra le unità di misura della memoria, multipli del byte.
Unità di misura
Byte
Corrisponde a
8 bit
KiloByte (KB)
2 byte
1024 byte
MegaByte (MB)
210 KB
1 048 576 byte
GigaByte (GB)
210 MB
1 073 741 824 byte
TeraByte (TB)
210 GB
1 099 511 627 776 byte
10
PetaByte (PB)
210 TB
HexaByte (HB)
210 PB
6
START – INFORMAZIONI E CALCOLATORI
Le celle di memoria sono numerate progressivamente partendo da zero. Il numero che le contraddistingue, espresso
naturalmente come sequenza di bit, viene detto indirizzo
ed è molto importante, infatti l’accesso a un’informazione
contenuta nella memoria è possibile solo tramite l’indirizzo della cella che la contiene. Il numero di bit utilizzati
per identificare gli indirizzi definisce la dimensione dello
spazio di indirizzamento, cioè il numero di celle di memoria direttamente indirizzabili. Generalmente la memoria di
un elaboratore è indirizzabile a livello di byte, ma quando
la parola è composta da più di un byte (cioè da 16, 32 o 64
bit), viene indirizzata mediante l’indirizzo del suo primo
byte di destra o di sinistra (in base alle convenzioni in uso).
Alla luce di questi concetti possiamo affermare che la parola
è per il computer la più piccola unità di informazione significativa e indirizzabile.
ARCHITETTURA DEL COMPUTER
I bus
Come viaggiano le informazioni all’interno della macchina? Il collegamento fisico
tra le varie unità funzionali di un computer è realizzato da un insieme di linee dette
bus; esso è costituito da una serie di collegamenti hardware (è simile a un gruppo
di fili), uno per bit, su cui viaggiano tutti i dati che vengono scambiati tra l’unità
centrale, la memoria e le unità di input/output.
In un sistema di elaborazione si trovano tre bus principali: il bus degli indirizzi (address bus), il bus dei dati (data bus) e il bus di controllo (control bus).
• Il bus degli indirizzi trasporta l’indirizzo necessario per reperire una cella di memoria o un’unità di I/O. L’unico dispositivo abilitato a inviare informazioni su
questo bus, che è unidirezionale, è la CPU. Il bus degli indirizzi è logicamente
composto da tanti fili quanti sono i bit che compongono l’indirizzo.
• Il bus dei dati viene utilizzato per lo scambio di informazioni tra i vari dispositivi.
È bidirezionale, in quanto l’invio di dati non è di sola pertinenza della CPU. Inoltre
è logicamente composto da tanti fili quanti sono i bit che compongono la parola
utilizzata come unità di trasferimento (ad esempio 16, 32 bit).
• il bus di controllo, anch’esso bidirezionale, è utilizzato per sincronizzare la trasmissione e per permettere lo scambio di segnali di controllo tra le varie unità
(segnali di lettura o scrittura, segnale di inizio o fine trasmissione, segnale di unità libera o occupata e così via). Il suo scopo principale è, pertanto, di coordinare
e controllare il traffico di tutte le informazioni viaggianti sugli altri due bus. Il
numero di fili che compongono questo bus è variabile: più linee lo compongono, maggiore è il numero di informazioni che può trasportare.
BUS DEGLI INDIRIZZI
UNITÀ
DI I/O
MEMORIA
CENTRALE
CPU
BUS DI CONTROLLO
BUS DEI DATI
La struttura a bus illustrata nella figura precedente prende il nome di architettura
unibus. Spesso, per raggiungere velocità più elevate, le case costruttrici adottano altre
architetture basate sulla presenza di coppie distinte di bus degli indirizzi e di bus dei
dati: una coppia si dedicherà agli accessi in memoria, l’altra agli accessi ai dispositivi
di I/O. Questa architettura, riportata nella figura seguente, prende il nome di architettura multibus e offre la possibilità di colloquiare con le unità di I/O mentre stanno
avvenendo accessi in memoria. I computer odierni utilizzano strutture di bus e di
controller molto più sofisticate sia per gli accessi in memoria RAM, sia per gli altri
dispositivi di I/O.
BUS DEGLI INDIRIZZI DI I/O
UNITÀ
DI I/O
BUS DEI DATI DI I/O
BUS DEGLI INDIRIZZI DI MEMORIA
CPU
MEMORIA
CENTRALE
BUS DEI DATI DI MEMORIA
ARCHITETTURA DEL COMPUTER START – INFORMAZIONI E CALCOLATORI
7
Architettura della memoria centrale
Le celle della memoria sono numerate progressivamente, ma non disposte in successione. Sono
organizzate in una matrice quadrata, come nella seguente figura.
DECODIFICATORE DELLE COLONNE
0
1
2
3
4
5
6
7
DECODIFICATORE DELLE RIGHE
0
1
2
3
4
5
6
7
Cella selezionata
Colonna
Riga
4
5
INDIRIZZO (in binario 100) (in binario 101)
A ogni intersezione tra le colonne e le righe si trovano le celle di memoria. L’indirizzo di memoria,
quindi, è composto da due parti: la prima a destra individua la riga e la restante parte individua la
colonna. La figura seguente rappresenta l’interpretazione di un indirizzo di 8 bit.
15
14
13
12
11
10
9
8
Indirizzo di colonna
7
6
5
4
3
2
1
0
Indirizzo di riga
Altre componenti logiche della memoria centrale indispensabili per poter realizzare il dialogo con
la CPU sono i registri.
I registri sono piccole e veloci memorie, generalmente composte da 1, 8, 16, 32 o 64 bit, che
svolgono funzioni ben precise e vengono utilizzate in determinate fasi dell’elaborazione.
I registri della memoria centrale sono i seguenti.
• MAR (Memory Address Register). È il registro degli indirizzi di memoria e contiene l’indirizzo
della cella di memoria in cui la CPU deve scrivere o da cui deve leggere un dato. La lunghezza
di questo registro è pari alla lunghezza dell’indirizzo stesso.
• MDR (Memory Data Register). È il registro dei dati di memoria e contiene la parola che deve
essere scritta o quella appena letta. La capacità di questo registro è, quindi, pari alla lunghezza
della parola.
• CONTR. Questo registro contiene appositi messaggi provenienti dalla memoria stessa e dalle
altre unità. Ad esempio, dopo un accesso, la memoria imposta in questo registro un messaggio
di “pronto”, mentre le altre unità, quando richiedono l’utilizzo della memoria, caricano in
esso un messaggio di lettura o di scrittura.
Vediamo, ora, come avvengono tecnicamente la lettura e la scrittura di un dato. Quando la CPU
necessita di un dato, invia al MAR, sul bus degli indirizzi, l’indirizzo della cella di memoria che
intende leggere. Contemporaneamente la CPU invia al CONTR, sul bus di controllo, il messaggio
di lettura. Una volta ricevuti questi ordini, la memoria si posiziona sulla cella riportante l’indirizzo indicato dal MAR, legge il dato e lo deposita nel registro MDR, poi imposta nel registro CONTR
un messaggio di pronto e invia il tutto sugli appositi bus. La lettura è così compiuta.
8
START – INFORMAZIONI E CALCOLATORI
ARCHITETTURA DEL COMPUTER
La scrittura, invece, inizia con l’invio alla memoria, da parte della CPU, del dato che dovrà
essere memorizzato, dell’indirizzo della cella che
lo dovrà contenere e del segnale di scrittura.
Tali informazioni sono inviate alla memoria per
mezzo degli appositi bus e depositate nei registri
preposti. Terminato il trasferimento, la memoria
analizza il registro CONTR e provvede a registrare
il dato presente nel MDR nella cella il cui indirizzo è riportato nel MAR. A registrazione avvenuta,
la memoria trasmetterà, sul bus di controllo, il
messaggio di pronto.
MAR
Bus degli indirizzi
Classificatore indirizzi
Memoria centrale
MDR
Bus dei dati
L’insieme di azioni appena descritto (necessario per poter compiere un’operazione di lettura o di scrittura)
prende il nome di ciclo di memoria e il tempo necessario per realizzarlo si chiama tempo di accesso e,
negli attuali elaboratori, è dell’ordine dei nanosecondi (1 nanosecondo = 1 miliardesimo di secondo).
La memoria centrale è generalmente costituita da tre memorie:
• la memoria RAM (Random Access Memory = memoria ad accesso casuale);
• la memoria ROM (Read Only Memory = memoria a sola lettura);
• la memoria CACHE o memoria tampone.
La memoria RAM è la memoria di lavoro sinora descritta; come ben sappiamo, offre la possibilità di leggere
e scrivere dati e istruzioni necessari per l’esecuzione di un programma. È ad accesso casuale perché in essa
ogni informazione può essere letta o scritta in un tempo che non dipende dalla posizione in cui l’informazione stessa è registrata. In questo tipo di memoria il tempo di ac­ces­so è costante.
La RAM è una memoria velocissima, ma è volatile, cioè perde il suo contenuto quando viene interrotta
l’alimentazione elettrica, a causa del tipo di materiale impiegato per la sua realizzazione.
La memoria ROM è di sola lettura. In essa sono memorizzate permanentemente le istruzioni che la CPU
deve leggere e interpretare per poter svolgere tutti i suoi compiti. Tale memorizzazione avviene all’atto della
fabbricazione. Più semplice e meno costosa della RAM, la ROM viene programmata dalle ditte produttrici
di hardware e il suo contenuto non può più essere cancellato o modificato: può solo essere letto. Per questa caratteristica la memoria ROM è adatta a contenere programmi particolari, quali, ad esempio, quelli
necessari per l’inizializzazione del sistema, ossia tutti quei programmi che vengono eseguiti al momento
dell’avviamento della macchina.
Esistono due fondamentali tipi di ROM: la ROM mascherata, della quale abbiamo parlato poc’anzi, e la
ROM programmabile, detta PROM (Programmable ROM), sulla quale l’utente può sempre leggere le informazioni memorizzate, ma può scrivere una sola volta per mezzo di apposite apparecchiature, dette programmatori di PROM. Poiché questa memoria è programmabile una sola volta, eventuali errori commessi
in fase di programmazione non possono essere corretti; per poter cambiare il programma memorizzato, è
necessario utilizzare un’altra PROM.
Per ovviare a questo inconveniente, sono state realizzate le EPROM (Erasable PROM) sulle quali, invece,
l’utente grazie ai programmatori di EPROM può scrivere ripetutamente, sfruttando le potenzialità dell’energia elettrica (per memorizzare) e dei raggi ultravioletti (per cancellare). Si tratta, quindi, di un “ibrido” tra
RAM e PROM.
La memoria CACHE è una particolare memoria RAM caratterizzata da un’elevatissima velocità. È utilizzata
come memoria intermedia tra CPU e memoria centrale, per aumentare la velocità e le prestazioni del computer. Essenzialmente è una memoria di transito con accesso molto rapido e viene utilizzata per memorizzare i dati temporanei usati più frequentemente, rendendoli disponibili senza doverli prelevare ogni volta
dalla memoria RAM che è decisamente meno veloce.
A questo punto possiamo affermare che tempo di accesso, capacità, lunghezza della parola, velocità e metodi di accesso sono i parametri fondamentali che caratterizzano le memorie.
CPU
Memoria cache
Memoria centrale
Unità I/O
ARCHITETTURA DEL COMPUTER START – INFORMAZIONI E CALCOLATORI
9
La CPU (Central Processing Unit)
La CPU (Central Processing Unit) rappresenta il nucleo di tutto il sistema di elaborazione ed è
responsabile dell’esecuzione e del controllo dei processi: per tale motivo, viene anche chiamata processore centrale.
Questo importantissimo processore (ma non è l’unico) viene realizzato, proprio come la memoria centrale, su un chip di silicio. A causa della ridottissima dimensione, viene chiamato microprocessore o microchip. Microprocessore e CPU non sono proprio la stessa cosa, anche se, in
pratica, coincidono fisicamente: con il termine microprocessore, infatti, ci riferiamo all’oggetto
che si trova nel computer (e ormai in tantissimi altri dispositivi, dalle automobili alle macchine
fotografiche agli impianti HI-FI), mentre con CPU ci riferiamo alla funzione svolta da tale oggetto.
La CPU ha il compito di:
•
•
•
•
provvedere alla registrazione in memoria centrale dei dati e delle istruzioni dei programmi;
riconoscere e interpretare le istruzioni del programma da eseguire;
eseguire le operazioni logiche e aritmetiche;
controllare tutte le operazioni necessarie per eseguire il processo di elaborazione e gestire il
traffico di informazioni con l’esterno.
Questa unità funzionale è composta da:
• un’unità di controllo detta CU (Control Unit);
• un’unità aritmetico-logica detta, generalmente, ALU (Arithmetic Logic Unit);
• alcuni registri.
Questi elementi sono collegati tra loro da un bus interno sul quale viaggiano le informazioni.
La figura seguente rappresenta la schematizzazione più dettagliata della macchina di von
Neumann.
Nella figura a pagina seguente, invece, è riportata la schematizzazione della struttura di una CPU.
Nella struttura dell’unità centrale di elaborazione riportata nella figura abbiamo utilizzato il termine interfaccia.
MEMORIA CENTRALE
ROM
RAM
CPU
UNITÀ
DI INPUT
UNITÀ DI CONTROLLO
ALU
UNITÀ
DI OUTPUT
L’interfaccia è qualunque elemento hardware o software che consente il collegamento fisico
e/o logico tra dispositivi diversi.
È un’interfaccia, quindi, sia il cavo che permette di collegare il video all’elaboratore, sia il dispositivo che consente il trasferimento dei dati dalla CPU ai bus. Ma anche i linguaggi di programmazione e i prodotti software sono interfacce: consentono infatti il dialogo uomo-macchina, permettendo all’utente di sfruttare le potenzialità del computer senza doverne conoscere le caratteristiche
tecniche.
10
START – INFORMAZIONI E CALCOLATORI
ARCHITETTURA DEL COMPUTER
L’unità di controllo (Control Unit: CU)
L’unità di controllo (o di governo) ha il compito di gestire e sovrintendere al funzionamento di tutte le unità del computer e all’esecuzione di tutti i processi da
compiere per eseguire i programmi residenti in memoria centrale.
Questa unità è composta da:
• un registro dell’istruzione corrente (IR = Instruction Register) che contiene l’istruzione che la CU deve eseguire;
• un registro contatore di programma (PC = Program Counter) che contiene l’indirizzo di memoria in cui si trova l’istruzione successiva a quella che la CU sta
eseguendo (cioè quella il cui codice è contenuto nel registro IR);
• alcuni registri generali, comodi per avere sempre disponibili dati che potranno
essere utili durante l’esecuzione del programma, ad esempio dati o risultati intermedi, che permettono un notevole risparmio di tempo;
• il registro Stack Pointer (SP), utilizzato per gestire una zona di memoria con la
tecnica della pila (LIFO); quest’area di memoria sarà utilizzata per salvare e recuperare non solo dati, ma anche la situazione del processore dopo l’arrivo e la
gestione di un segnale di interruzione;
• un decodificatore, che ha il compito di decodificare (ossia di interpretare)
l’istruzione contenuta nel registro IR al fine di riconoscerne il tipo;
• un temporizzatore (clock), cioè un oscillatore al quarzo che genera una serie di
impulsi a frequenza regolare, utilizzato per sincronizzare l’invio di tutti i segnali
generati dalla CU.
Con questi dispositivi, la CU è in grado di svolgere le sue principali funzioni:
• prelevare le istruzioni del programma da eseguire registrate in memoria centrale;
• interpretare, volta per volta, le istruzioni lette;
• eseguire le istruzioni attivando e controllando le unità coinvolte nell’esecuzione.
L’unità aritmetico-logica (Arithmetic Logic Unit: ALU)
All’unità aritmetico-logica spetta il compito di eseguire, sotto la continua supervisione della CU, le operazioni aritmetiche e logiche sui dati provenienti dalla
memoria.
L’ALU svolge il suo compito attraverso i seguenti elementi.
• Una rete logica di calcolo, costituita da:
– un circuito addizionatore per eseguire le operazioni aritmetiche operante con
due parole in ingresso e una in uscita, codificate in formato binario;
– alcuni circuiti per eseguire le operazioni logiche elementari (AND, OR,
NOT), lo shift, la determinazione del segno di un numero e il confronto.
• Uno o più registri accumulatori (AC), utilizzati per contenere temporaneamente
i dati provenienti dalla memoria centrale. Tramite questi registri vengono eseguiti
materialmente i calcoli
• Un registro di stato (SR = Status Register) con il quale comunica alla CU informazioni sul tipo di risultato ottenuto dopo l’esecuzione dell’operazione. Questo
registro è composto da un insieme di bit (flag), a ognuno dei quali è attribuito un
significato particolare. I bit di stato più comuni sono i seguenti:
– C (bit di carry), chiamato anche bit di riporto: contiene il valore binario 1 se
nell’operazione eseguita dall’ALU c’è stato un riporto;
– N (bit di segno), chiamato anche bit di negatività: contiene 1 se il risultato
dell’operazione terminata è negativo;
– Z (bit di zero): contiene 1 se il risultato dell’operazione conclusa è a zero;
– O (bit di overflow): contiene 1 se nell’operazione conclusa c’è stato un trabocco;
– P (bit di parità): contiene 1 se il risultato dell’operazione è costituito da un
numero pari di cifre 1.
ARCHITETTURA DEL COMPUTER START – INFORMAZIONI E CALCOLATORI
11
Linguaggio macchina
e formato delle istruzioni
Le istruzioni di un programma da eseguire, residente in memoria centrale, sono codificate
in linguaggio macchina, unico linguaggio comprensibile alla CPU.
Il linguaggio macchina è composto da un insieme di istruzioni macchina (espresse
utilizzando il codice binario). Tali istruzioni svolgono ciascuna una funzione elementare,
eseguibile direttamente dalla CPU.
Per poter eseguire il programma è necessario che tutte le istruzioni macchina che lo compongono siano contenute nella memoria centrale in parole adiacenti. Per quanto riguarda
la natura funzionale delle istruzioni, queste possono essere divise in cinque gruppi, cioè
l’insieme minimo di classi di istruzioni eseguibili dalla CPU.
• Istruzioni di input/output dei dati: con queste istruzioni si opera sui dispositivi che trasferiscono i dati dalle unità di input alla memoria centrale del computer (o da quest’ultima alle unità di output). Ad esempio: “Leggi N” oppure “Stampa N”.
• Istruzioni aritmetico-logiche: con queste istruzioni si eseguono le operazioni di calcolo
(come l’addizione o la divisione) e le operazioni logiche (AND, OR, NOT e così via).
• Istruzioni di controllo e di salto: con queste istruzioni si interviene per alterare la sequenza di un programma in fase di esecuzione, saltando senza che si verifichi alcuna
condizione verso un altro punto del programma (salto incondizionato), oppure saltando un determinato gruppo di istruzioni in conseguenza del risultato di un test (salto
condizionato). Ad esempio, un’istruzione di salto condizionato potrebbe essere: “Vai a
eseguire l’istruzione 200 se il dato nella posizione di memoria x è positivo”.
• Istruzioni per lo spostamento dei dati: con queste istruzioni si spostano i dati all’interno della memoria centrale. Ad esempio: “Sposta il dato contenuto nella posizione di
memoria 4500 alla posizione 5000” (assegnazione).
• Istruzioni di riordino o di controllo macchina: con queste istruzioni non si opera direttamente per l’esecuzione di un programma, ma per ripristinare le condizioni del computer. Ad esempio “Riavvolgi il nastro n° 3”.
La lunghezza di un’istruzione macchina può variare da computer a computer, in quanto
ognuno ha il proprio linguaggio macchina. In generale, ogni istruzione macchina può
avere una lunghezza pari a un multiplo della parola di memoria. Per quanto riguarda la
forma, ogni istruzione macchina si può suddividere in due campi:
• un campo codice operativo, che identifica il tipo di operazione da eseguire;
• un campo operandi, che contiene i dati o gli indirizzi dei dati o, ancora, riferimenti a
registri sui quali sarà eseguita l’operazione descritta dal codice operativo. Il campo operandi può essere composto da più campi ma, generalmente, non sono mai più di tre.
CODICE OPERATIVO
CODICE OPERATIVO
12
OPERANDI
OPER. 1
OPER. 2
...
OPER. N
Molto spesso sono soltanto uno o due o, addirittura, nessuno. In assenza di operandi,
l’istruzione sarà composta, naturalmente, dal solo codice operativo. Nel caso di tre operandi, invece, il terzo indica, normalmente, dove porre il risultato.
START – INFORMAZIONI E CALCOLATORI
ARCHITETTURA DEL COMPUTER
Riportiamo un esempio di istruzione a tre operandi. Supponiamo che l’istruzione
da eseguire, scritta in pseudolinguaggio, sia la seguente:
C←A+B
Naturalmente, i dati contenuti nelle variabili A e B sono contenuti in memoria centrale in apposite celle. Supponiamo che l’indirizzo della cella contenente la variabile
A sia 1010 e quello della variabile B sia 1011. Un esempio di istruzione macchina
che realizza tale istruzione potrebbe essere la seguente:
“Somma il dato contenuto nella cella di memoria avente indirizzo 1010 al dato
contenuto nella cella di indirizzo 1011 e poni il risultato nella cella di memoria
di indirizzo 1101”
dove 1101 è l’indirizzo della cella di memoria che ospiterà il contenuto della variabile C. Se immaginiamo che il codice operativo dell’operazione somma sia 0101,
l’istruzione macchina potrebbe essere così rappresentata:
0101
1010
1011
1101
Dall’esempio si evince che, spesso, per eseguire un’istruzione macchina, la CU è
costretta a eseguire un insieme di passi elementari: nella nostra somma, infatti, la
CU ha dovuto dapprima prelevare i due dati, poi effettuare la somma, poi, ancora,
memorizzare il risultato. Quindi, per eseguire un’istruzione in linguaggio macchina
occorre eseguire un determinato numero di operazioni, che devono essere necessariamente descritte per mezzo di istruzioni elementari direttamente eseguibili dai
componenti hardware del computer.
In passato, l’esecuzione di un’istruzione veniva svolta dalla CU per mezzo di una
rete di circuiti logici. In particolare, veniva assegnata a ogni istruzione macchina una
rete di circuiti logici che eseguivano e controllavano tutte le operazioni elementari
necessarie per eseguire l’istruzione in questione. In questi casi si parlava di elaboratori a logica cablata.
Questi elaboratori erano contraddistinti da una comprensibile rigidità e da una
notevole limitazione delle prestazioni. Con l’evolversi della tecnologia e con l’attenta osservazione che la maggior parte delle operazioni elementari erano comuni a
molte istruzioni macchina, nacque una nuova logica di esecuzione delle istruzioni,
basata sulla tecnica di microprogrammazione. Secondo questa tecnica, le istruzioni macchina non sono più le istruzioni di livello più basso; ne esistono infatti
altre di livello ancora più basso (le istruzioni elementari), dette microistruzioni, che
vengono registrate all’interno di una memoria ROM. In questo caso, l’esecuzione
di un’istruzione sarà effettuata attivando il microprogramma (cioè un gruppo di
microistruzioni) appositamente predisposto. I microprogrammi memorizzati permanentemente in una memoria ROM costituiscono, come già sappiamo, il firmware
della macchina. I computer che eseguono le istruzioni, sfruttando tale tecnica si
dicono a logica programmata. I computer di oggi sono a logica programmata e
risultano, evidentemente, più potenti e dotati di maggiore flessibilità.
ARCHITETTURA DEL COMPUTER START – INFORMAZIONI E CALCOLATORI
13
L’esecuzione delle istruzioni
È ormai chiaro che l’elaborazione delle istruzioni di un programma consiste nell’esecuzione, da parte della CU, di una precisa successione di passi elementari:
• prelevamento dalla memoria centrale dell’istruzione che deve essere eseguita
(fase di fetch);
• interpretazione dell’istruzione, ossia determinazione del “cosa deve svolgere
l’istruzione” (fase di decode);
• esecuzione dell’istruzione (fase di execute). A tal proposito:
– e l’istruzione è di input, la CU comanda ai dispositivi preposti di introdurre i
dati in memoria centrale;
– se l’istruzione è di output, la CU comanda alle unità di output di inviare
all’esterno i dati registrati nella memoria centrale;
– se l’istruzione è di elaborazione, la CU comanda il prelevamento dei dati
dalla memoria centrale e li invia all’ALU, alla quale impartisce compiti per
l’elaborazione. Poi provvederà a registrare il risultato ottenuto nella memoria
centrale.
Vediamo come avviene l’esecuzione del programma e quali sono le risorse coinvolte.
1. L’esecuzione del programma inizia sempre con l’assegnazione al registro PC
dell’indirizzo della prima istruzione in memoria centrale.
2. L’indirizzo di memoria contenuto nel registro PC viene trasferito nel registro
MAR e inviato alla memoria tramite il bus degli indirizzi.
3. La memoria preleva l’istruzione, il cui indirizzo è specificato nel MAR, e carica
il registro MDR. Può succedere che, a causa della lunghezza dell’istruzione, ne
venga prelevata solo una parte. Essa deve contenere il codice operativo, per poter
risalire all’istruzione e poterne prelevare la parte rimanente.
4. Il contenuto del registro MDR viene inviato alla CPU per mezzo del bus dei dati
e, giunto a destinazione, viene depositato nel registro IR.
5. Il decodificatore provvede a interpretare il codice operativo dell’istruzione presente nel registro IR per “capire” il tipo di operazione richiesta e identificare il
microprogramma necessario per eseguirla. Successivamente, incrementa il registro PC in modo da aver pronto l’indirizzo della successiva istruzione da eseguire.
Poiché le istruzioni che compongono il programma vengono memorizzate una
dopo l’altra in celle di memoria contigue (secondo l’ordine di esecuzione sequenziale), l’indirizzo di ogni istruzione viene ricavato dall’indirizzo dell’istruzione
precedente, più la sua lunghezza. Ad esempio:
10
5
15
istruzione 1
istruzione 2
istruzione 3
10
20
25
40
6. Terminate tutte le operazioni preliminari, la CU, in base al tipo di operazione,
attiva il microprogramma preposto a eseguirla. Se l’istruzione prevede dei calcoli,
viene richiesto l’intervento dell’ALU, che provvederà anche a prelevare dalla memoria centrale gli operandi e a depositarli nei registri accumulatori.
7. Terminata l’esecuzione, i risultati presenti nei registri accumulatori vengono trasferiti in memoria centrale.
8. E ora si ricomincia con la successiva istruzione! Si riparte dal punto 2.
14
START – INFORMAZIONI E CALCOLATORI
ARCHITETTURA DEL COMPUTER
L’intero procedimento viene chiamato ciclo di istruzione ed è realizzato attraverso
più microoperazioni. L’esecuzione delle microoperazioni avviene per passi detti
cicli macchina, costituiti da una sequenza di operazioni elementari che la CU deve
eseguire ogni volta che deve accedere in memoria o alle unità di I/O.
Ogni singolo ciclo macchina deve avvenire in modo regolare. Per questo tutti i segnali inviati dalla CU per l’attivazione di qualunque dispositivo vengono impartiti
in sincrono con un orologio interno alla macchina: il clock. A ogni colpo di clock,
viene inviato un segnale e quindi viene compiuta una microistruzione. Per questo
motivo il ciclo macchina viene anche chiamato ciclo di clock. Utilizzando una
metafora possiamo affermare che, se la CPU rappresenta il “cervello” del computer,
il clock ne è, sicuramente, il “cuore”. Il clock è un orologio molto veloce: non può
essere paragonato ai nostri orologi da polso! La sua frequenza, infatti, è dell’ordine
dei mega/gigahertz, ossia di milioni/miliardi di cicli al secondo.
Ad esempio, la frase “Un computer lavora a 3 GHz” ci dice che in un secondo vengono eseguiti 3 miliardi di cicli di clock.
stop
Questa frequenza è un importantissimo indice della velocità del computer.
Mediamente, però, per poter eseguire alcuni tipi di operazioni sono necessari più
colpi di clock: per questo motivo, possiamo anche misurare la velocità del computer
in MIPS (Millions of Instructions Per Second = “milioni di istruzioni per secondo”). È evidente che il numero di colpi di clock è quasi sempre superiore al numero di istruzioni
da eseguire e, per questo motivo, la velocità espressa in MIPS è sempre inferiore a
quella espressa in GHz.
leggi
scrivi
UNITÀ DI CONTROLLO
PC
bus
controllo
MEMORIA CENTRALE
bus
indirizzi
IR
MAR
MDR
bus
dati
PSW
registro
registro
...
registro
stato
ALU
esegui
operazione
UNITÀ CENTRALE DI ELABORAZIONE
ARCHITETTURA DEL COMPUTER START – INFORMAZIONI E CALCOLATORI
15
Le porte e le periferiche
Il computer è composto anche da altre unità, dette unità di I/O indicate come periferiche, in quanto sono dispositivi (device) esterni all’unità centrale. Il loro compito
è quello di fungere da collegamento tra il computer (inteso come memoria e CPU)
e il mondo esterno (l’utente). Un computer usa, generalmente, più periferiche di
diverso tipo, ognuna delle quali ha un suo compito particolare: alcune si preoccupano dell’introduzione delle informazioni (input), altre permettono la visualizzazione
dei risultati dell’elaborazione (output), altre ancora permettono di trasmettere o di
memorizzare permanentemente dati e programmi.
Ogni periferica necessita di un’interfaccia per gestire lo scambio dei dati con la CPU.
L’interfaccia è composta da dispositivi hardware e software. I dispositivi hardware
sono le interfacce di I/O e i controller, mentre il dispositivo software viene detto
driver di periferica.
Le interfacce di I/O sono serie di circuiti specifici per ogni dispositivo periferico che
consentono di interconnettere quest’ultimo con il modulo base. Permettono, quindi, di instaurare un “dialogo” tra la periferica e la CPU.
Il collegamento delle periferiche avviene tramite cavi connettori che si inseriscono per mezzo di apposite prese, dette porte. Dal punto di vista della modalità di
trasmissione, le porte si distinguono in seriali e parallele. Nelle porte seriali i dati
viaggiano, come dice la parola stessa, in serie, uno dopo l’altro. Nelle porte parallele i dati viaggiano in gruppi. Anche i cavi connettori sono seriali o paralleli e sono
fisicamente diversi tra loro, in modo da non consentire il collegamento di un cavo
parallelo a una porta seriale e viceversa.
Un particolare tipo di porta parallela è la porta SCSI (Small Computer System
Interface), che consente di collegare più dispostivi insieme, ad esempio dischi fissi
e periferiche ad alta velocità. Un particolare tipo di porta seriale, invece, è la porta
MIDI (Musical Instrument Digital Interface), che permette di collegare al computer vari
tipi di strumenti musicali.
La porta FireWire (IEEE 1394) è una porta di comunicazione molto veloce (può arrivare a 800 MB/s) solitamente utilizzata per trasferire dati dalle fotocamere e dalle
videocamere digitali. Anche questa interfaccia consente il collegamento delle periferiche quando il computer è già acceso (hotplug).
La PCMCIA (Personal Computer Memory Card International Association),
un’associazione commerciale che comprende più di quattrocento società
produttrici di materiale hardware e software, ha sviluppato lo standard per
le PC card. Si tratta di speciali adattatori, del formato di una carta di credito, per PC e altri sistemi elettronici. Lo speciale tipo di connettore studiato
per i PC portatili è rappresentato dalla porta PCMCIA.
Le schede PCMCIA possono contenere modem, espansioni di memoria,
porte, hard disk e altro. Tra gli obiettivi di questo tipo di schede vi è l’interscambiabilità tra le PC card e altri sistemi, come, ad esempio, distributori
automatici o macchine fotografiche digitali.
16
START – INFORMAZIONI E CALCOLATORI
ARCHITETTURA DEL COMPUTER
Il formato di connessione USB (Universal Serial Bus) sostituisce le porte seriali, più
lente, e supporta un collegamento a cascata di numerose periferiche, fino a 127 dispositivi in sequenza sulla stessa porta. Ciò consente di evitare l’utilizzo di slot interni al PC. L’USB è un formato di connessione che supporta l’hotplug, cioè consente di
collegare e scollegare “a caldo”, ovvero a computer acceso, dispositivi che vengono
automaticamente riconosciuti dal computer grazie alla funzione plug & play. Una
porta USB 1.1 può trasferire dati a una velocità massima di 12 MB/s, mentre il più
recente standard USB 2.0 è in grado di trasferire dati a una velocità massima di 480
MB/s (simile a FireWire). Questo formato è del tutto compatibile con la precedente
versione USB 1.1; ciò significa che le periferiche USB 2.0 possono essere collegate e
funzioneranno normalmente, seppure alla velocità delle USB 1.1. Per sfruttare interamente le potenzialità di USB 2.0, le periferiche devono essere abilitate per questa
tecnologia e collegate a una porta USB 2.0.
La porta a infrarossi (IRDA) è una porta seriale senza fili che funziona grazie ai raggi
infrarossi, proprio come i telecomandi dei televisori. È bidirezionale e raggiunge una
velocità di trasmissione bassa (9600 bit al secondo). È utile per collegare tastiere e
mouse o altre apparecchiature che non necessitano di alta velocità. I miglioramenti
apportati a questa porta hanno consentito di aumentarne la velocità fino a 4 Mbps.
Il trasferimento dei dati è possibile solo se le porte “si vedono” e la loro distanza non
supera i 2-3 metri.
Un’alternativa alla tecnologia a raggi infrarossi è rappresentata da BLUETOOTH, che
consente di collegare diversi dispositivi (ad esempio cellulari, stampanti, notebook
o computer desktop dotati della stessa tecnologia) a una distanza di 10 metri senza
fili e alla velocità di 1 Mbps senza la necessità che i dispositivi siano orientati tra di
loro per poter funzionare in maniera corretta.
Una caratteristica interfaccia di I/O, che merita un accenno, è la scheda video. Si
tratta di un vero e proprio processore dedicato alla gestione del video. La qualità di
questi dispositivi dipende dalla quantità di pixel che riescono a visualizzare e dalla
velocità di elaborazione delle immagini.
I moduli di interfaccia contengono in genere una particolare memoria, detta
buffer (o memoria di transito) sulla quale transitano i dati in ingresso e in uscita. Il
buffer viene utilizzato per rendere asincrona la comunicazione tra CPU e periferiche. Chiariamo quest’ultimo concetto: la CPU in genere è il dispositivo più veloce
presente in un sistema di elaborazione; se dovesse trasferire i dati a una periferica e
aspettare che questa termini l’operazione, vi sarebbe un notevolissimo incremento
di tempi morti e un conseguente calo delle prestazioni del computer. Con l’ausilio
dei buffer, il problema viene risolto. Quando, ad esempio, la CPU invia i dati di output a una stampante, li memorizza nel suo buffer, in modo da svincolarsi da questa
operazione e continuare il suo lavoro. Se il buffer si riempie e restano ancora dei
dati da trasferire, allora la CPU è costretta ad arrestare il suo lavoro e attendere che
si svuoti la parte di buffer necessaria a contenere i dati non ancora inviati (in seguito
vedremo anche come la CPU risolve questo problema).
Nei moduli di interfaccia, inoltre, sono presenti porte di I/O che permettono il
collegamento fisico con il sistema dei bus attraverso gli slot. In sintesi, quindi, l’interfaccia ha il compito di collegare il sistema dei bus al buffer, per poter realizzare il
trasferimento dei dati.
La porta di rete (Ethernet) serve per collegare il computer direttamente a una rete
di computer senza l’utilizzo del modem. La presa utilizzata è la RJ45, oramai uno
standard di fatto.
ARCHITETTURA DEL COMPUTER START – INFORMAZIONI E CALCOLATORI
17
Le memorie di massa
Le memorie di massa, o memorie ausiliarie, sono quelle sulle quali è solo possibile
conservare dati e programmi: da esse non può dipendere alcun tipo di elaborazione.
Quindi, per poter elaborare dei dati o per poter eseguire programmi registrati su
una memoria di massa, occorre dapprima trasferirli nella memoria centrale, unica
memoria sulla quale la CPU è in grado di operare. Alla luce di quanto detto, siamo
ora in grado di completare il modello di von Neumann.
MEMORIE
DI MASSA
MEMORIA CENTRALE
ROM
RAM
CPU
UNITÀ
DI INPUT
UNITÀ DI CONTROLLO
ALU
UNITÀ
DI OUTPUT
Queste memorie presentano le seguenti caratteristiche:
•
•
•
•
•
conservano permanentemente i dati;
possono contenere grandissime quantità di informazioni;
sono memorie trasportabili;
sono meno costose della memoria centrale;
sono più lente della memoria centrale.
I dispositivi di memoria di massa più comuni sono le memorie magnetiche e le memorie ottiche. I dispositivi magnetici sono costituiti da un supporto piano ricoperto
di materiale ferromagnetico, sul quale è possibile memorizzare le informazioni
magnetizzando apposite areole (l’equivalente delle celle di memoria). Queste ben si
prestano alla memorizzazione di segnali digitali, in quanto possono assumere due
stati in base alla direzione del campo magnetico: pertanto, uno stato rappresenterà
l’1, l’altro lo 0.
La registrazione avviene mediante una testina composta da un traferro, sul quale è
avvolto a spirale un filo conduttore. A seconda del verso con cui passa la corrente, il
percorso a spirale genera un campo magnetico, effettuando in questa maniera una
memorizzazione permanente.
Il passaggio delle areole sotto la testina avviene mediante un movimento meccanico
a velocità costante del supporto di memorizzazione. La stessa testina si preoccupa
anche di leggere i dati memorizzati: per questo motivo la chiameremo testina di
lettura/scrittura.
Tutte le memorie di massa magnetiche hanno in comune i seguenti parametri:
• velocità di movimento del supporto di memorizzazione misurata in pollici/sec;
• densità di memorizzazione misurata in bit/pollice;
• velocità di trasferimento misurata in bit/sec, pari al prodotto dei due parametri
precedenti.
18
START – INFORMAZIONI E CALCOLATORI
ARCHITETTURA DEL COMPUTER
Tipici supporti magnetici di memorizzazione di massa sono i nastri e i dischi.
Il disco è un supporto di memorizzazione di massa costituito da un piatto accuratamente levigato, le cui facce sono ricoperte di sostanza magnetica.
L’unità di memorizzazione, invece, è composta da un dispositivo dotato di testine,
all’interno del quale il disco ruota velocemente attorno a un asse. Tale dispositivo
è chiamato drive e comunica con l’unità centrale grazie al proprio controller. La
superficie del disco è composta da tantissime areole magnetizzabili, nelle quali
vengono memorizzate le informazioni binarie per mezzo dell’apposita testina di
lettura/scrittura. Quanto più piccole sono le areole, tanto più grande sarà la capacità
del disco. Le areole si trovano su apposite piste circolari concentriche, denominate
tracce, su cui i dati vengono memorizzati sequenzialmente. Ogni traccia è suddivisa
in un numero fisso di settori separati da zone neutre, dette gap.
I settori diventano sempre più piccoli andando dall’esterno verso l’interno. La quantità di informazioni memorizzabili, però, è sempre la stessa: cambia solo la densità
di memorizzazione.
I dischi si classificano in:
• fissi (hard disk);
• rimovibili (floppy disk, flash disk e così via).
L’hard disk è costituito da una pila di dischi di alluminio (disk-pack), disposti uno sopra l’altro a un’opportuna distanza, che ruotano intorno a uno
stesso asse verticale con velocità uniforme (dell’ordine di circa 7200 giri al
minuto). Sono rinchiusi all’interno di un contenitore ermetico, nel quale è
presente un braccio a forma di pettine, sulle cui estremità si trovano le testine di lettura/scrittura.
L’insieme di tutte le tracce a una fissata distanza dall’asse
viene detto cilindro.
Ogni singolo braccio meccanico è mobile, ossia ogni braccio contiene una testina
di lettura/scrittura per ogni faccia del disco; parleremo quindi di hard disk a testine
mobili.
Il tempo necessario per poter accedere a un settore, l’unità minima di memoria che
può essere letta o scritta, viene chiamato tempo di accesso, si misura in millisecondi (msec) ed è dato dalla somma di:
• tempo di posizionamento (o tempo di seek), ossia il tempo necessario affinché la
testina si posizioni sulla traccia contenente il settore interessato; il tempo impiegato dipende anche dall’ampiezza dello spostamento (aumenta a mano a mano
che ci avviciniamo alle tracce più interne: 1-20 msec);
• tempo di latenza, ossia il tempo di attesa necessario affinché il settore interessato passi sotto la testina di lettura/scrittura; tale tempo dipende dalla velocità di
rotazione dei dischi e, in media, è uguale al semiperiodo di rotazione dei dischi
(0,2-0,6 msec).
La velocità di trasferimento è la quantità di byte trasferiti da o verso la memoria di
massa e si misura in MB/sec.
I dischi magnetici sono supporti di memorizzazione di massa detti ad accesso diretto o casuale, in
quanto è possibile posizionarsi direttamente su una
singola informazione, a prescindere dalla sua posizione fisica e da tutte quelle che la precedono. È sufficiente conoscere numero di faccia, traccia e settore.
ARCHITETTURA DEL COMPUTER START – INFORMAZIONI E CALCOLATORI
19
Cache, supporti USB, dischi ottici
La cache di disco
Per migliorare le prestazioni del sistema, e in particolare per accelerare l’accesso ai
dati, la CPU sfrutta la cosiddetta cache di disco, ossia un’area dell’hard disk all’interno della quale vengono memorizzati i dati che la CPU sta per utilizzare.
Quando viene letto un settore, i dati contenuti nei settori vicini vengono trasferiti
nella cache: in questo modo si evita di rimettere in funzione il disco fisso per reperire questi dati che, presumibilmente, saranno letti successivamente.
Il disco fisso può anche essere utilizzato dalla CPU per simulare la memoria RAM. La
CPU sfrutta parte del disco come memoria centrale quando devono essere mantenuti aperti più programmi contemporaneamente, o devono essere manipolate grandi
quantità di dati che la RAM non è sufficiente ad accogliere. Quest’area dell’hard disk
viene detta memoria virtuale.
I supporti USB
La mania degli USB Flash Disk, detti anche pen drive, che hanno rimpiazzato i vecchi
floppy disk, ha contagiato davvero tutti: si tratta di piccoli e pratici dispositivi dotati
di connettore USB che permettono di archiviare dati e programmi. I sistemi operativi più recenti possono leggere e scrivere queste memorie senza installare i driver.
Inizialmente erano poco più piccoli di un evidenziatore e con capienza variabile fra
gli 8 e i 16 MB, ma la nuova generazione si è evoluta moltissimo, e in uno spazio
poco più grande di due fiammiferi permette di archiviare da 64 MB a vari GB di dati,
più che sufficienti per avere con sé tutto il materiale che si desidera.
I supporti ottici
Un ultimo gruppo di dispositivi fisici dedicati all’archiviazione delle informazioni
sfrutta le cosiddette tecnologie ottiche.
Un CD è un semplice pezzo di plastica policarbonata largo circa 12 cm e alto circa
1,2 millimetri. Su di esso è incisa una lunga traccia a spirale che parte dal centro e
arriva all’esterno del disco. La caratteristica di avere la spirale che parte dal centro
(contrariamente ai dischi in vinile utilizzati in campo musicale) e procede verso
l’esterno, permette di avere CD più piccoli dello standard (per esempio i mini-CD, o
i CD a forma di carta di credito). La struttura a spirale consente inoltre di massimizzare le prestazioni per l’accesso sequenziale a scapito dell’accesso diretto.
La superficie della spirale è formata da una sequenza di aree piane (land). Durante la
creazione di un CD, la traccia viene deformata con piccolissimi buchi (bump) creati
sulle aree piane. Creando i bump sulla spirale non si fa altro che scrivere i singoli bit
di ogni byte: 0 (land) e 1 (bump). Una volta che il pezzo di
policarbonato è stato inciso con milioni di bump, uno strato
di alluminio riflettente viene stampato per coprirli e proteggerli. Uno strato di acrilico e infine l’etichetta completano il
tutto.
Per quanto riguarda la lettura, i bit “ottici” sono letti da una
testina che emette un fascio di luce (laser) che, durante la rotazione, colpisce le singole aree. Il bump si comporta come
uno specchio, per cui la luce incidente viene riflessa e raccolta
da un dispositivo sensibile alla luce (diodo fotorilevatore).
Il land, invece, cioè l’area piana, non si comporta come uno
specchio e, quindi, la luce incidente è diffusa dai rilievi in
tutte le direzioni e pertanto non viene rilevato alcun segnale
riflesso.
20
START – INFORMAZIONI E CALCOLATORI
ARCHITETTURA DEL COMPUTER
Etichetta
Acrilico
Alluminio
125 nm
Plastica policarbonata
1,2 mm
La velocità di trasferimento dati di un lettore ottico è espressa in byte/carattere al secondo. I primi lettori avevano una velocità di 150 KB al secondo e questo valore è divenuto
il riferimento per rappresentare le velocità maggiori. Tali velocità sono indicate con i
simboli 2x, 8x, 50x e così via e indicano il multiplo di quella di riferimento; corrispondono, rispettivamente, a 300, 1200, 7500 KB al secondo. Essendo strutturati con una
traccia a spirale, i CD sono in grado di massimizzare le prestazioni per l’accesso sequenziale a scapito dell’accesso diretto.
• CD-ROM (Compact Disc Read Only Memory). Sono dischi ottici a sola lettura e, come
tali, non riscrivibili. Possono memorizzare grandissime quantità di informazioni
(anche 2 GB). Per questo motivo vengono utilizzati per contenere intere enciclopedie, film, disegni, prodotti multimediali, che permettono all’utente di chiedere e
ricevere informazioni sotto forma di immagini, testi, suoni, animazioni.
• CD-WORM (Write Once Read Many). Su questi dischi è possibile effettuare l’operazione di scrittura, ma soltanto nelle parti vuote, servendosi di un particolare dispositivo,
detto masterizzatore. È possibile, quindi, memorizzare sequenzialmente e non è
possibile alcuna operazione di modifica o cancellazione. Per tali motivi vengono
utilizzati soltanto per catalogare e archiviare informazioni non soggette a modifiche.
Sono noti come CD-R (dall’inglese Compact Disc-Recordable). La loro capacità varia
da 650 a 700 MB, ma possono contenere più di spazio se, durante la masterizzazione,
si attiva il processo di over-burn. Esistono anche CD-R che hanno capacità da 800 e
900 MB, ma non sono molto diffusi. Un’ulteriore caratteristica dei CD-R è la velocità
di scrittura, che variare da 1x a 52x. I CD-R possono essere scritti in una sola volta o in
più riprese (multisessione), ma non possono essere cancellati o riscritti.
• CD-WMRA (Write Many Read Always). Sono dischi ottici utilizzati come un normale
disco magnetico, in grado, quindi, di consentire la scrittura e l’aggiornamento delle
informazioni presenti. Sono conosciuti come CD riscrivibili (CDRW – CD Rewritable)
e consentono, quindi, di modificare i dati anche dopo la prima masterizzazione
È possibile riscrivere 650 MB di dati per circa 1000 volte. Escludendo la possibilità di
cancellare completamente un disco, per il resto i CD-RW sono molto simili ai normali CD-R e, come tali, sono soggetti alle stesse restrizioni: ad esempio, è possibile
aggiungere sessioni a un CD registrato, ma non si può scrivere in modo selettivo e,
inoltre, le sessioni devono essere chiuse prima di essere lette nei lettori CD-ROM o
nei riproduttori.
• DVD (Digital Versatile Disc). Sono utilizzati per le correnti applicazioni multimediali
(immagini fisse, animate, film e così via); hanno una capacità da 4,7 a 17 GB e hanno
quasi del tutto sostituito le videocassette.
I DVD, oltre a essere più capienti dei CD, sono caratterizzati anche da una velocità
maggiore. Basti pensare che la minima velocità di trasmissione dati di un DVD è nove
volte maggiore di quella di un CD; di conseguenza, un lettore DVD da 1x è praticamente
equivalente a un lettore CD da 8x. Più esattamente, 1x per un lettore DVD equivale a
1350 kB/s, mentre 1x per un lettore CD equivale a 150 kB/s.
Per leggere questi supporti è necessario un apposito lettore. Un lettore per DVD legge
anche i normali CD.
Un ultimo supporto di memorizzazione a tecnologia ottica è il MOD (Magneto Optical
Disk), o semplicemente MO. Ne esistono di tre misure: 3,5 pollici (come i vecchi floppy), 5,25 pollici e 12 pollici. La capacità cresce con le dimensioni. L’uso di questi dischetti estraibili è piuttosto raro, in genere i dischi magneto-ottici vengono impiegati in
batterie di dischi interni (tipo hard disk), che possono arrivare a sfiorare la capacità di
1 terabyte.
ARCHITETTURA DEL COMPUTER START – INFORMAZIONI E CALCOLATORI
21
Come contavano i nostri antenati
Il concetto di numerazione si riferisce al problema fondamentale di rappresentare i numeri, che
sono infiniti, con un numero finito di segni: le cifre. L’uomo fin dalle origini della storia ha avvertito la necessità di contare e per farlo utilizzava gli strumenti che aveva a disposizione: mani, pietre, bastoncini. I cumuli di pietre erano mezzi troppo precari per la conservazione di informazioni,
perciò l’uomo preistorico talvolta registrava i numeri incidendo intaccature su un bastone o su un
osso. Molti anni fa in Cecoslovacchia è stato ritrovato un osso di lupo che presenta cinquantacinque intaccature profondamente incise in due serie: venticinque nella prima e trenta nella seconda;
all’interno di ciascuna serie le intaccature sono distribuite in gruppi di cinque.
Già da questo esempio si comprende che l’idea di numero è molto più antica di quanto possiamo
immaginare, più antica dei progressi tecnologici come l’uso dei metalli. L’idea di numero precede
la nascita della civiltà e della scrittura, nel senso comune del termine, infatti sono stati ritrovati
resti archeologici a cui è riferibile un significato numerico, come l’osso di lupo appena descritto,
che risalgono a circa 30.000 anni fa. Con il passare del tempo, spinto dal bisogno di ampliare le
sue possibilità di conteggio, l’uomo cominciò a pensare all’uso di simboli ai quali assegnare un
valore particolare.
Pensiamo agli antichi Egizi. Comprendere il mistero della numerazione geroglifica egiziana fu
piuttosto semplice. Gli Egizi riuscivano a incidere sulla pietra numeri superiori al milione. Un
unico trattino verticale rappresentava l’unità, un archetto capovolto indicava 10, un laccio simile a
un punto interrogativo rappresentava 100, un fiore di loto 1000, un dito piegato 10000, un barbio
(simile a un girino) 100000 e una figura inginocchiata (forse il dio dell’infinito) 1000000.
Numero
1
Simbolo
10000
10
100
Numero
100000
1000000
1000
Mediante la ripetizione di questi simboli si poteva scrivere, per esempio, il
numero 3673 in questo modo:
Mentre il numero 4622 veniva scritto
come:
22
START – INFORMAZIONI E CALCOLATORI
ARITMETICA DEL COMPUTER
Simbolo
Talvolta le cifre più piccole venivano collocate a sinistra, altre volte venivano disposte verticalmente. I simboli stessi potevano essere orientati in senso contrario: il
laccio, per esempio, poteva essere convesso verso destra o verso sinistra. Questo era
un primo esempio di sistema di numerazione in base dieci.
Gli antichi Romani utilizzavano sette simboli, a ognuno dei quali attribuivano un
particolare valore:
I
1
V
5
X
10
L
C
D
M
50 100 500 1000
Tutti gli altri numeri venivano ottenuti con opportune combinazioni di simboli che
simulavano la somma algebrica.
Per esempio, il numero 7 si otteneva come:
5+1+1 ossia V+I+I = VII
Il numero 1762 veniva rappresentato nel seguente modo:
1000+500+100+100+50+10+1+1
ossia:
M+D+C+C+L+X+I+I = MDCCLXII
Il numero 1952, infine, si otteneva come:
1000+(1000–100)+50+1+1
ossia:
M+(CM)+L+I+I = MCMLII
E infine, pensiamo ai Greci. In Grecia pare vi fossero due sistemi principali di numerazione: uno noto come il sistema attico (o erodianico), l’altro detto sistema ionico
(o alfabetico). Entrambi erano fondati sulla base dieci.
Il sistema attico è più primitivo ed era basato su un semplice schema iterativo proprio come quello che abbiamo riscontrato nella numerazione geroglifica egiziana.
In questo sistema i numeri da uno a quattro erano rappresentati da trattini verticali
ripetuti. Per il numero cinque si usava un nuovo simbolo: la prima lettera P (o G)
della parola cinque, pente, rappresentata dal simbolo G. Per indicare i numeri dal
sei al nove, il sistema attico aggiungeva al simbolo G dei trattini che indicavano
le unità. Per esprimere le potenze intere positive della base venivano adottate le
lettere iniziali delle corrispondenti parole numeriche: D per deca (dieci), H per
hekaton (cento), X per khilioi (mille) e M per myrioi (diecimila). Fatta eccezione per
la forma dei simboli, il sistema attico era molto simile a quello romano, ma aveva
un vantaggio rispetto a quest’ultimo: mentre i Romani utilizzavano simboli diversi
per indicare 50 e 500, i Greci li scrivevano mediante la combinazione delle lettere
che indicavano 5, 10 e 100: usavano quindi:
(cioè 5 volte 10) per indicare 50 e
(cioè 5 volte 1000) per indicare 5000
Di un certo interesse era anche il sistema vigesimale degli antichi Maya, che
utilizzava come base dei calcoli il numero 20, cioè la somma delle dita dei
mani e dei piedi. La conchiglia era il simbolo dello zero; il punto equivaleva
a uno; la barra (––) a 5. Questo sistema di numerazione, di tipo posizionale
e non additivo come quello romano, permetteva di calcolare somme molto grandi. Si trattava in effetti di un sistema certamente migliore di quelli
egiziano e greco-romano, tanto che i conquistatori spagnoli rimasero impressionati dalla rapidità con cui i Maya erano in grado di contare i semi di
cacao, senza disporre di misure di capacità o peso, che vendevano uno a uno
in quantità varianti da 400 a 8.000.
ARITMETICA DEL COMPUTER START – INFORMAZIONI E CALCOLATORI
23
Sistemi addizionali e sistemi posizionali
Sistemi addizionali e sistemi posizionali
Cominciamo dalla definizione di sistema di numerazione.
Si definisce sistema di numerazione un insieme di simboli e di regole che permettono di rappresentare i numeri e possibilmente alcune operazioni che si possono effettuare su di essi.
Per definire un sistema di numerazione è necessario indicare:
• un insieme di simboli detti cifre;
• una sintassi, cioè un insieme di regole che specificano come costruire i vari numeri.
Per comprendere la differenza tra sistemi addizionali e sistemi posizionali, considera con attenzione quanto segue.
Abbiamo visto che nella numerazione romana si utilizzano tra gli altri i simboli I, V, X, L, C,
mentre nella nostra abituale numerazione decimale i simboli sono esattamente 10, ossia: 0, 1,
2, 3, 4, 5, 6, 7, 8, 9.
I simboli quindi sono diversi, ma è altrettanto importante il fatto che sono diverse le regole
in base alle quali si scrivono i numeri (sintassi). Per renderci conto di questo facciamo alcuni
semplici esempi.
Consideriamo il numero romano XXXII. Tenendo conto che i Romani sottintendevano il segno
di addizione, possiamo dire che corrisponde al numero: X+X+X+I+I= 32.
Consideriamo, ora, le due scritture:
IX e XI
Sappiamo che IX rappresenta il numero naturale 9, mentre XI rappresenta il numero 11. È noto
infatti che, nel sistema di numerazione adottato dai Romani, il simbolo I, se è posto prima di
un altro simbolo, sottrae una unità, mentre se è posto dopo un altro simbolo aggiunge una
unità al simbolo che lo precede.
Riprendiamo, ora, il numero XXXII. Se pensassimo di tradurlo simbolo per simbolo in cifre
arabe otterremmo:
X
10
X
10
X
10
I
1
I
1
con un valore numerico completamente diverso. Come mai? Qui entra in gioco la differenza di
sintassi. Osserviamo allora che il sistema di numerazione romano è additivo o addizionale.
In un sistema addizionale la regola per rappresentare un numero è relativamente semplice:
il valore di ciascun simbolo viene sommato se immediatamente alla sua destra compare un
simbolo di valore inferiore o uguale (oppure se è l’ultimo), altrimenti viene sottratto.
Il sistema additivo, però, non è esente da possibili ambiguità e quindi potenziale confusione,
come si nota subito quando ci si trova davanti a numeri quali XIX, che potrebbe essere interpretato come:
X+I+X =21
oppure come:
X+(I – X) =19
valore che effettivamente gli viene attribuito, o anche:
X+I – X =?
Viene spontaneo pensare che questo tipo di sistema non sia poi tanto comodo.
24
START – INFORMAZIONI E CALCOLATORI
ARITMETICA DEL COMPUTER
Un altro svantaggio dei sistemi di questo tipo risiede nelle dimensioni delle rappresentazioni che si ottengono (in termini di quantità di simboli impiegati): i simboli
hanno un valore fissato indipendentemente dalla posizione che occupano e
quindi la codifica di un numero ha una lunghezza proporzionale al numero stesso.
Il sistema addizionale è stato molto usato nel passato, anche se, come abbiamo appena detto, era caratterizzato da notevoli svantaggi. La svolta decisiva che condusse
all’introduzione dei sistemi posizionali avvenne intorno all’anno 500 d.C. grazie
al matematico indiano Aryabhata, che riprese l’idea dell’astronomo babilonese
Naburian (400 a.C.) e introdusse il concetto di numero zero. Fino ad allora, infatti,
nessuno si era preoccupato di contare “zero cose”, ossia nulla. Dopo attenta analisi su che cosa rappresentasse questo numero, e una volta compresa la sua grande
utilità, gli Arabi lo introdussero nell’Occidente permettendo, così, il passaggio dai
sistemi addizionali ai nostri sistemi posizionali o pesati.
In un sistema di numerazione posizionale una stessa cifra (0, 1, 2, 3...) assume
valori diversi (cioè ha un peso diverso) a seconda della posizione che occupa
all’interno di un numero.
Un sistema di numerazione posizionale è definito da:
• una base b che indica il numero di simboli utilizzato per rappresentare tutti i numeri (per esempio, base 2, base 10, base 16 e così via) e quante unità dell’ordine
inferiore servono per formare una unità dell’ordine immediatamente superiore;
• un insieme c di cifre distinte (naturalmente l’insieme è costituito da b cifre distinte. Nel sistema a base 5, per esempio, avremo 5 cifre distinte, in quello a base 8
ne avremo 8 e così via). Ogni cifra può assumere un valore compreso tra 0 e b – 1.
A ognuna di queste cifre possono essere assegnati due valori: uno che dipende
esclusivamente dalla forma della cifra, e che pertanto potremmo chiamare valore
facciale, e uno legato alla posizione della cifra nel numero, a partire dalla virgola
verso destra o verso sinistra, al quale si dà appunto il nome di valore posizionale;
• un insieme di regole necessarie per poter interpretare il numero, per contare e
per eseguire le operazioni.
Ogni numero si esprime come somma dei prodotti di ciascuna cifra per la base
elevata all’esponente che rappresenta la posizione della cifra stessa. Vediamo alcuni
esempi:
7
70 700 77 777 7,7 7,77 rappresenta sette unità (valore facciale)
=7*10 rappresenta settanta unità
=7*100 rappresenta settecento unità
=70+7=7*10+7
=700+70+7=7*100+7*10+7
=7+ 7
10
=7+ 7 + 7
10 100
Abbiamo dunque scritto sette numeri usando sempre lo stesso simbolo dal valore
facciale equivalente a sette unità, però il valore del numero rappresentato cambia a
mano a mano che varia la posizione della cifra 7. Così dal valore di sette unità siamo
passati a settanta e successivamente a settecento. Poi, da settantasette siamo passati a
settecentosettantasette e infine abbiamo rappresentato 7+sette decimi di unità e 7+sette decimi di unità+sette centesimi di unità.
Per concludere possiamo dire che nel sistema posizionale, proprio perché esiste una
regola per passare da una cifra alla precedente e alla seguente, ogni numero, per
quanto grande, può essere scritto con pochi simboli elementari, il numero dei quali
dipende dal sistema di numerazione prescelto.
ARITMETICA DEL COMPUTER START – INFORMAZIONI E CALCOLATORI
25
I sistemi di numerazione
decimale e binario
Il sistema di numerazione decimale
Aristotele, uno dei più innovativi e prolifici uomini di cultura del mondo antico, notò
che l’uso della base decimale per il sistema di numerazione si doveva al fatto che siamo
nati con dieci dita dei piedi e dieci dita delle mani. Il sistema di numerazione decimale,
o sistema in base 10, è un sistema posizionale e utilizza le seguenti dieci cifre decimali:
0 1 2 3 4 5 6 7 8 9
Queste cifre, opportunamente combinate, permettono di rappresentare qualsiasi numero. I numeri superiori a 9 vengono formati con più di una cifra.
Prendiamo in esame il numero 238. Sappiamo bene che la cifra 8 rappresenta le unità,
la cifra 3 le decine e la cifra 2 le centinaia. Ma attenzione: dire 3 decine o 30 unità non è
forse la stessa cosa? E dire 2 centinaia o 200 unità non è anche la stessa cosa? Da questo
esempio si ricava una regola di base: a mano a mano che ci spostiamo verso sinistra, il
valore di una cifra viene ricondotto alle unità moltiplicandolo per il suo peso, ossia moltiplicandolo per 10 elevato a un esponente pari alla posizione occupata:
Posizione
6
5
4
3
2
1
Peso
106
105
104
103
102
101
Valore
milioni centinaia
decine
migliaia centinaia decine
del peso
di migliaia di migliaia
0
100
unità
Nel numero 238, quindi, il numero 3 ha il suo valore intrinseco che è, appunto, 3, ma ha
un valore posizionale di 3*101. Analogamente, il 2 ha il suo valore intrinseco 2, ma ha
un valore posizionale di 2*102.
A questo punto possiamo dire che il numero 238 può essere espresso nel seguente modo:
2*102 + 3*101 + 8*100 = 2*100 + 3*10 + 8*1 = 200 + 30 + 8 = 238
Ora analizziamo il numero 1258,64. In questo caso ci troviamo di fronte a un numero
composto da un parte intera e da una decimale. Per esprimere i valori delle singole cifre
dobbiamo servirci anche della tabella seeguente, che riporta i pesi delle cifre poste alla
destra della virgola decimale:
Posizione
Peso
Valore
del peso
1
10-1
decimi
2
10-2
centesimi
3
10-3
millesimi
4
5
6
-4
-5
10
10
10-6
decicentimilionesimi
millesimi millesimi
A questo punto il numero può essere espresso nel seguente modo:
1*1000+2*100 +5*10 +8*1 +6*1/10 +4*1/100 =
1000 +200 +50 +8 +0,6
+0,04
= 1258,64
In generale, quindi, possiamo scrivere ogni numero come combinazione di potenze di 10:
numero = cn*10n+cn–1*10n–1+...+c0*100+c–1*10–1+c–2*10–2 ...
dove:
• c0 ... cn possono avere i valori da 0 a 9;
• 10 è la base.
26
START – INFORMAZIONI E CALCOLATORI
ARITMETICA DEL COMPUTER
Generalizzando la formula e indicando con b la generica base otteniamo:
numero = cn*b n+cn–1*b n–1+...+c0*b 0+c–1*b –1+c–2*b–2 ...
Tale forma costituisce la cosiddetta notazione polinomiale o espansa, così chiamata proprio perché viene evidenziato il valore di ogni cifra.
Il sistema di numerazione binario
All’interno di un computer la rappresentazione di tutte le informazioni è di tipo
numerico. La base di rappresentazione è di tipo binario, cioè si basa su un sistema
di numerazione che è costituito da due soli simboli 0 e 1 dette cifre binarie o bit, termine derivante dalla contrazione di Binary Digit. Questa circostanza deriva dal fatto
che le macchine elettroniche numeriche sono costituite da unità fisiche elementari,
le quali sono in grado di operare con due soli livelli stabili.
Un numero binario è un numero composto da una sequenza di 0 e di 1, e i pesi associati a queste due cifre sono, naturalmente, potenze della base 2.
Posizione ... 6 5 4 3 2 1 0
Peso
... 26 25 24 23 22 21 20
.
.
1
2–1
2
2–2
3
2–3
4
2-4
5
2-5
...
...
Benché 0 e 1 siano simboli che possono appartenere sia al sistema di numerazione
decimale che a quello binario, non c’è ambiguità nella rappresentazione, purché
sia definito a priori su quale base si sta operando. Infatti, il numero 1101 nel sistema
decimale esprime una quantità numerica diversa rispetto al sistema binario.
Il numero 735 non pone questa ambiguità, poiché il sistema binario non dispone dei
simboli 7, 3, e 5, ma potrebbe rappresentare un numero in una base contenente 8
diversi simboli (da 0 a 7). Per evitare dubbi e ambiguità, all’interno di una formalizzazione rigorosa è corretto rappresentare ogni numero esplicitando la base utilizzata,
come in: 1101(2) e 735(10).
stop
All’interno di un numero, la cifra più a sinistra (cioè quella elevata alla potenza più
alta) viene detta cifra più significativa o bit più pesante, mentre la cifra più a destra
(cioè quella elevata alla potenza più bassa) è detta cifra meno significativa o bit più
leggero). La numerazione naturale si ottiene, analogamente a quanto avviene nel
sistema decimale e similmente a tutte le altre basi, per mezzo di una successione
ordinata di tutti i simboli disponibili (due nel sistema binario, dieci nel sistema
decimale) a partire dalla posizione meno significativa; una volta esauriti i simboli
in tale posizione si aumenta di una unità la posizione successiva e si ricomincia la
successione dei simboli dall’inizio:
Questa sequenza di numeri binari, ciascuno costituito da tre cifre binarie (3 bit),
consente di generare 8 diverse combinazioni. Perciò, se includiamo lo zero, con 3
soli bit potremmo contare fino a 7 unità. Ciò conduce alla regola generale secondo
la quale disponendo di un numero N di cifre binarie è possibile rappresentare 2N
combinazioni e quindi rappresentare come massima quantità positiva il numero
2N–1. Per esempio, con 16 bit si possono ottenere 216 = 65536 combinazioni diverse
e quindi esprimere come massima quantità positiva il numero 65535.
3 cifre in base 10:
8 cifre in base 2 (1 byte):
16 cifre in base 2 (2 byte):
32 cifre in base 2 (4 byte):
da 0 a
da 0 a
da 0 a
da 0 a
999 = 103–1
255 = 28–1
65535 = 216–1
4294967295 = 232–1
In generale, pertanto, con N cifre in base b possiamo rappresentare bN valori compresi tra 0 e bN–1.
Maggiore è il numero di bit a disposizione per la rappresentazione di un numero e
maggiore è l’ampiezza dell’intervallo di rappresentazione da 0 a bN–1.
ARITMETICA DEL COMPUTER START – INFORMAZIONI E CALCOLATORI
27
Conversione da binario a decimale
e da decimale a binario
Conversione da binario a decimale
Per conoscere il valore decimale di un numero binario basta esprimerlo in notazione espansa, quindi:
moltiplichiamo ciascuna cifra binaria per il suo corrispondente peso e sommiamo
alla fine i prodotti ottenuti.
Facciamo un esempio utilizzando la seguente tabella:
2n
1
2
4
8
16
32
64
128
256
512
1024
n
0
1
2
3
4
5
6
7
8
9
10
2–n
1.0
0.5
0.25
0.125
0.0625
0.03125
0.015625
0.0078125
0.00390625
0.001953125
0.0009765625
Nel seguito utilizzeremo spesso il punto decimale al posto della virgola decimale,
perché quando si realizzano programmi al computer generalmente occorre procedere in questo modo.
Determiniamo il valore decimale del numero binario 100101:
1*25+0*24+0*23+1*22+0*21+1*20=
1*32+0+0+1*4+0+1=32+4+1=37
Quindi 100101(2) = 37(10)
Ora determiniamo il valore decimale del numero binario 11111110
1*27+1*26+1*25+1*24+1*23+1*22+1*21+1*20=
1*128+1*64+1*32+1*16+1*8+1*4+1*2+0 = 128+64+32+16+8+4+2=254
Quindi 11111110(2) =254(10)
stop
28
È prassi comune esprimere verbalmente i numeri binari come sequenze di cifre 0 e 1,
quindi il numero 1101 non si legge “millecentouno” (come si farebbe normalmente
se la base fosse decimale), bensì “uno uno zero uno”.
START – INFORMAZIONI E CALCOLATORI
ARITMETICA DEL COMPUTER
Conversione da decimale a binario
Per convertire un numero decimale intero in un numero binario è possibile utilizzare il metodo delle divisioni successive, fondato sulla seguente regola:
Si divide il numero N da convertire per due e il resto (che naturalmente può
essere soltanto 1 o 0) rappresenta la prima cifra meno significativa del numero
binario corrispondente. Successivamente si divide il quoziente ottenuto per due
e si ottiene un resto che rappresenta la seconda cifra meno significativa. Si ripete
il procedimento fino a quando il quoziente sarà uguale a zero.
Come abbiamo già visto, la significatività di una cifra dipende dal suo peso; quindi,
all’interno di un numero, la cifra meno significativa è quella che ha il valore posizionale più basso, mentre la cifra più significativa, ovviamente, è quella caratterizzata dal valore posizionale più elevato.
Per esempio, nel numero binario 1001100111 avremo:
Cifra più significativa
Cifra meno significativa
1001100111
Ora trasformiamo il numero decimale 18 nel suo corrispondente binario:
18
9
4
2
1
:
:
:
:
:
2 =
2 =
2 =
2 =
2 =
9
4
2
1
0
resto 0
resto 1
resto 0
resto 0
resto 1
Cifra meno significativa
Cifra più significativa
10010
Quindi 18(10)=10010(2).
Ora trasformiamo il numero decimale 137 nel suo corrispondente binario:
137:
68 :
34 :
17 :
8 :
4 :
2 :
1 :
2 =
2 =
2 =
2 =
2 =
2 =
2 =
2 =
68
34
17
8
4
2
1
0
resto 1
resto 0
resto 0
resto 1
resto 0
resto 0
resto 0
resto 1
Cifra meno significativa
Cifra più significativa
10001001
Quindi 137(10)=10001001(2).
Un ultimo esempio, trasformiamo il numero decimale 127 in binario:
127:
63 :
31 :
15 :
7 :
3 :
1 :
2 =
2 =
2 =
2 =
2 =
2 =
2 =
63
31
15
7
3
1
0
resto 1
resto 1
resto 1
resto 1
resto 1
resto 1
resto 1
Cifra meno significativa
Cifra più significativa
1111111
Quindi 127(10)=1111111(2).
ARITMETICA DEL COMPUTER START – INFORMAZIONI E CALCOLATORI
29
app.//
Conversione da binario a decimale
e da decimale a binario
Convertiamo il numero binario 100101.101 nel suo corrispondente decimale
Il numero da trasformare presenta una parte decimale. Nessun problema! L’unica
differenza consiste nel fatto che occorre tenere conto che per i numeri decimali le
potenze del 2 sono negative.
Quindi:
100101.101(2) = ???(10) ?
1*25 + 0*24 + 0*23 + 1*22 + 0*21 + 1*20 + 1*2–1 + 0*2–2 + 1*2–3 =
1*32 + 0 + 0 + 1*4 + 0 + 1 + 1*1/2 + 0 + 1*1/8 =
32 + 4 + 1 + 1/2 + 1/8 =
32 + 4 + 1 + 0,5 + 0,125 =
=37.625
Quindi 100101.101(2) = 37.625(10).
Convertiamo il numero binario 111101.1011 nel suo corrispondente decimale
111101.1011(2) = ???(10) ?
1*25 + 1*24 + 1*23 + 1*22 + 0*21 + 1*20 + 1*2–1 + 0*2–2 + 1*2–3 + 1*2–4 =
1*32 + 1*16 + 1*8 + 1*4 + 0 + 1*1 + 1*1/2 + 0 + 1*1/8 + 1*1/16 =
32 + 16 + 8 + 4 + 1 + 1/2 + 1/8 + 1/16 =
32 + 16 + 8 + 4 + 1 + 0,5 + 0,125 + 0.0625 =
= 61.6875
Quindi 111101.1011(2) = 61.6875(10).
Convertiamo il numero decimale 845 nel suo equivalente binario
Ognuno di noi può utilizzare qualsiasi metodo per eseguire la divisione per 2. In
precedenza, per esempio, abbiamo effettuato delle divisioni in colonna. Potremmo
effetuare la divisione nel modo più classico, oppure servirci di una tabella: sono tutti
metodi validi, puoi scegliere quello che più ti sembra comodo.
Nel seguente esempio eseguiamo la divisione nel modo classico e tramite una tabella.
845(10) = ?????(2)
845 2
1 422 2
0 211 2
1 105 2
1 52 2
0 26 2
0 13 2
1 6 2
0 3 2
1 1
30
START – INFORMAZIONI E CALCOLATORI
ARITMETICA DEL COMPUTER
Dividendo
845
422
211
105
52
26
13
6
3
1
Divisore
2
2
2
2
2
2
2
2
2
2
Quoziente
422
211
105
52
26
13
6
3
1
0
Resto
1
0
1
1
0
0
1
0
1
1
845(10)=1101001101(2)
Convertiamo il numero decimale 0.53125 nel suo equivalente binario
In questo caso utilizziamo il metodo delle moltiplicazioni successive. Il prodotto
ottenuto sarà anch’esso composto da una parte intera e da una decimale. La parte
intera, che potrà essere soltanto 1 o 0, rappresenta il nostro bit, mentre la parte decimale continuerà a essere moltiplicata per due. I bit ottenuti saranno scritti uno di
seguito all’altro nello stesso ordine in cui sono ottenuti, cioè da sinistra a destra.
Il procedimento termina quando da una moltiplicazione si ottiene un prodotto privo di parte decimale (cioè con parte decimale uguale a zero). Tuttavia, se questo non
avviene (pensa ai numeri periodici), possiamo bloccare il procedimento dopo aver
eseguito un determinato numero di moltiplicazioni. In questo caso, naturalmente, il
numero binario ottenuto sarà solo un’approssimazione del numero decimale.
Convertiamo il numero decimale 0.53125 nel suo equivalente formato binario.
0.53125
0.0625
0.125
0.25
0.5
* 2 = 1.0625
* 2 = 0.125
* 2 = 0.25
* 2 = 0.5
* 2 = 1.0
la parte intera è 1
la parte intera è 0
la parte intera è 0
la parte intera è 0
la parte intera è 1 la parte decimale è 0.
Il numero binario corrispondente è, quindi, 0.10001(2).
Ora proviamo a convertire in binario il numero decimale 0.63.
0.63
0.26
0.52
0.04
0.08
0.16
0.32
...
* 2 = 1.26
* 2 = 0.52
* 2 = 1.04
* 2 = 0.08
* 2 = 0.16
* 2 = 0.32
* 2 = 0.64
la parte intera è 1
la parte intera è 0
la parte intera è 1
la parte intera è 0
la parte intera è 0
la parte intera è 0
la parte intera è 0
Come puoi notare, la parte decimale continua a risultare diversa da zero costringendoci a eseguire ulteriori moltiplicazioni. In situazioni di questo tipo conviene
stabilire a priori un numero massimo di moltiplicazioni da effettuare. Quindi, se
supponiamo di considerare solo cinque bit, l’equivalente numero binario di 0.63(10)
sarà 0.10100(2).
Convertiamo 0.10100(2) in decimale e vediamo a quale numero corrisponde.
1*2–1 + 0*2–2 + 1*2–3 + 0*2–4 + 0*2–5 = 1*1/2 + 0 + 1*1/8 + 0 + 0 = 1/2 + 1/8 = 0.625
Abbiamo ottenuto 0.625 e non 0.63. L’errore è dato dalla seguente differenza:
0.63 – 0.625 = 0.005
Ci siamo avvicinati moltissimo al numero dato, 0.63, e se avessimo fatto ancora
qualche altra moltiplicazione, l’approssimazione sarebbe stata sempre migliore.
ARITMETICA DEL COMPUTER START – INFORMAZIONI E CALCOLATORI
31
ex.]
Conversione da binario a decimale
e da decimale a binario
1 Trasforma i seguenti numeri binari nel loro corrispondente decimale:
•
11001100(2) = ___________(10)
1*27 + ……………………………………………………………………………
128 + …………………………………………………………………………..
•
10101010(2) = ___________(10)
1*27 + ……………………………………………………………………………
128 + …………………………………………………………………………..
•
11110000(2) = ___________(10)
1*27 + ……………………………………………………………………………
128 + …………………………………………………………………………..
2 Trasforma i seguenti numeri binari nel loro corrispondente decimale:
•
01010100(2) = ___________(10)
…………………………………………………………………………………….
……………………………………………………………………………………..
•
00000110(2) = ___________(10)
…………………………………………………………………………………….
…………………………………………………………………………………….
• 11100110(2) = ___________(10)
…………………………………………………………………………………….
…………………………………………………………………………………….
3 Trasforma i seguenti numeri binari nel loro corrispondente decimale:
•
1100.11(2) = ___________(10)
…………………………………………………………………………………….
…………………………………………………………………………………….
•
11110.111(2) = ___________(10)
…………………………………………………………………………………….
…………………………………………………………………………………….
•
11100.101(2) = ___________(10)
…………………………………………………………………………………….
…………………………………………………………………………………….
4 Trasforma il numero binario 110001 nel suo equivalente decimale utilizzando il
metodo di seguito descritto.
Con la seguente tabella è facilmente calcolabile il valore decimale di un numero in notazione binaria:
Notazione
esponenziale
Numerazione
decimale calcolato
Cifre binarie
da trasformare
32
...
(212)
(211)
(210)
(29)
(28)
(27) (26) (25) (24) (23) (22) (21) (20)
...
2048 1024
512
256
128
64
START – INFORMAZIONI E CALCOLATORI
ARITMETICA DEL COMPUTER
32
16
8
4
2
1
Esempio pratico:
dato il numero 110001(2), calcola il suo equivalente in notazione decimale.
Notazione esponenziale
Numero decimale calcolato
...
...
(26)
64
Cifre binarie da trasformare
(25)
32
(24)
16
(23)
8
(22)
4
(21)
2
(20)
1
1
1
0
0
0
1
1+16+32=49d
Numero decimale:
(il 2, il 4 e l’8 sono corrispondenti agli zeri, quindi non vengono conteggiati).
5 Utilizzando il metodo appena descritto, converti il numero binario 1110111(2) nel
suo equivalente decimale:
Notazione
esponenziale
Numero decimale
calcolato
Cifre binarie
da trasformare
1110111(2) = ………………………..(10)
6 Trasforma il numero decimale 147(10) nel suo equivalente binario:
Dividendo
Divisore
Quoziente
Resto
147(10) = ……………….(2)
7 Trasforma il numero decimale 212(10) nel suo equivalente binario:
Dividendo
Divisore
Quoziente
Resto
212(10) = ……………….(2)
ARITMETICA DEL COMPUTER START – INFORMAZIONI E CALCOLATORI
33
Aritmetica binaria: somma e prodotto
Le regole che caratterizzano l’aritmetica binaria sono analoghe alle regole ben conosciute che
valgono nel sistema decimale, con il necessario adattamento dovuto all’uso di due soli simboli 0
e 1. Trovi nel seguito le tabelle con tali regole (addizione, moltiplicazione e sottrazione binaria)
con alcuni esempi esplicativi su ciascuna operazione.
La somma
Il procedimento (algoritmo) dell’operazione di somma non cambia qualunque sia la base considerata. Naturalmente le regole da imparare nel caso di una base b sono relative alle sole b2 possibili combinazioni delle cifre da 0 a b–1. Così le 100 regole della base 10 si riducono a 4 nella
base 2:
stop
0+0 = 0
0+1 = 1
1+0 = 1
1+1 = 0 con riporto 1
+
0
1
0
0
1
1
1
10
Ovvero 0 con riporto di 1
Nell’ultima regola si vede la semplificazione portata dalla base 2: a parità di significato (valore),
un numero scritto in base 2 è molto più lungo dell’equivalente scritto in base 10, ma le regole per
eseguire la somma sono di gran lunga più semplici. Per il computer questo è essenziale, infatti
la velocità della macchina permette di non preoccuparsi eccessivamente della lunghezza dei
numeri, mentre le regole per la somma delle coppie di cifre sono legate ai circuiti elettronici che
devono eseguirle, e tali circuiti risultano senz’altro più semplici quando occorre realizzare soltanto
4 regole anziché 100.
Per la somma di due numeri positivi di lunghezza K possono essere necessari K+1 bit. Se sono
disponibili solo K cifre si genera un errore di overflow (termine inglese che significa “trabocco”).
Proviamo a sommare i numeri binari 111011 e 1011.
Riporto
Risultato
1
1
1
1
1
1
0
0
Binario
1
1
1
1
0
1
0
0
0
0
1
1
1
0
+
=
Overflow
Approfondiamo il caso dell’errore di overflow a cui abbiamo fatto cenno in precedenza.
Si verifica overflow quando, a partire da due numeri ciascuno di n bit, si ottiene una somma
che ha bisogno di (n+1) bit.
Consideriamo la base dieci: con tre cifre decimali si possono rappresentare i numeri compresi tra
0 e 999. Il numero successivo (1000) richiede una quarta cifra che, però, non abbiamo. In questo
caso si dice che c’è un problema di overflow: si genera un errore perché il numero 1000 non può
essere rappresentato.
Poiché il numero 999 può essere scritto come 103–1 (ossia 1000–1), possiamo enunciare la seguente regola:
con N cifre decimali si possono rappresentare i numeri da 0 a 10N–1.
34
START – INFORMAZIONI E CALCOLATORI
ARITMETICA DEL COMPUTER
Facciamo un esempio. Sappiamo che alla rappresentazione decimale si possono
applicare le operazioni aritmetiche; vogliamo però usare solo tre cifre decimali. Per
questo motivo le successive operazioni di somma produrranno risultati formalmente corretti, ma non rappresentabili con tre cifre:
325
6
12
678
560
999
+158= 483
+ 98= 104
+ 45= 57
+421= 1099
+923= 1483
+ 1= 1000
Ora consideriamo la base due: con tre cifre binarie si possono rappresentare i numeri compresi tra 0 e 23–1 (ossia 8–1). Possiamo enunciare la seguente regola:
con N cifre binarie si possono rappresentare i numeri da 0 a 2N–1.
Facciamo un esempio: supponiamo di voler effettuare la somma di 5 e 4 in formato binario su 3 bit. Dopo aver effettuato la conversione, eseguiamo la somma.
Abbiamo:
101 +
100 =
Overflow
1 001
Il prodotto
Analogo all’operazione di somma è il prodotto. Anche in questo caso l’operazione
si riduce al prodotto di ciascuna coppia di cifre. Nel caso della base 2 tutto si riduce
a ricordare l’esiguo numero di 2*2=4 regole, che sono:
0*0 = 0
0*1 = 0
1*0 = 0
1*1 = 1
×
0
1
0
0
0
1
0
1
In definitiva:
• il prodotto per zero dà sempre come risultato zero;
• il prodotto per 1 dà sempre come risultato il numero stesso.
Ora moltiplichiamo i due numeri binari: 0101 e 0010:
0
0
0
0
0
1
1
1
0
0
0
0
0
1
0
1
1
1
0
0
-0
×
=
+
=
Come nel sistema decimale, anche nel sistema binario la moltiplicazione è assimilabile a una sequenza di somme del moltiplicando per se stesso tante volte quante
sono indicate dal moltiplicatore.
ARITMETICA DEL COMPUTER START – INFORMAZIONI E CALCOLATORI
35
ex.]
Aritmetica binaria: somma e prodotto
1 Esegui la somma fra i numeri binari 101 e 111:
1 0 1 +
1 1 1 =
–––––––––––––––––
(riporti)
2 Esegui la somma fra i numeri binari 10111 e 11110:
1 0 1 1 1 +
1 1 1 1 0 =
––––––––––––––––––––––––––––
(riporti)
3 Esegui la somma fra i numeri binari 1101 e 111:
1 1 0 1 +
1 1 1 =
––––––––––––––––––––––-–-
(riporti)
4 Esegui la somma fra i numeri binari 101010 e 1010:
1 0 1 0 1 0 +
1 0 1 0 =
–––––––––––––––––––––––––––––––––
(riporti)
5 Esegui la somma fra i numeri binari 1111 e 10101:
(riporti)
1 1 1 1 +
1 0 1 0 1 =
––––––––––––––––––––––––––––
6 Correggi la seguente somma:
1 0 1 0 0 1 1 +
1 1 0 0 0 1 1 =
––––––––––––––––––––––––––––––––––––––––––––
1 1 1 1 0 0 1 0
7 Esegui la somma fra i numeri binari 110011 e 111111:
1 1 0 0 1 1 +
1 1 1 1 1 1 =
–––––––––––––––––––––––––––––––––
(riporti)
8 Esegui la somma fra i numeri binari 100011 + 1001 + 11011:
1 0 0 0 1 1 +
1 0 0 1 +
1 1 0 1 1 =
–––––––––––––––––––––––––––––––––
36
START – INFORMAZIONI E CALCOLATORI
(riporti)
ARITMETICA DEL COMPUTER
9 Osserva le seguenti moltiplicazioni tra numeri binari e poi svolgi quelle proposte.
Esempio 1. Esegui la moltiplicazione fra i numeri binari 1101 e 101:
(riporti)
1 1 0 1 ×
1 0 1 =
–––––––––––––––––––––––––––––
1 1 1 1
(riporti)
1 1 0 1 +
0 0 0 0
+
1 1 0 1
–––––––––––––––––––––––––––––
1 0 0 0 0 0 1
Esempio 2. Esegui la moltiplicazione fra i numeri binari 1011 e 1011:
(riporti)
1 1 0 1 ×
1 0 1 1 =
–––––––––––––––––––––––––––––
1 1 1 1
(riporti)
1 0 1 1 +
1 0 1 1
+
0 0 0 0
+
1 0 1 1
–––––––––––––––––––––––––––––
1 1 1 1 0 0 1
10 Verifica che la seguente operazione 11011 × 101 sia stata eseguita correttamente:
1 1 0 1 1 ×
1 0 1 =
–––––––––––––––––––––––––––––––––
1 1 0 1 1 +
0 0 0 0 0
+
1 1 0 1 1
–––––––––––––––––––––––––––––––––
1 0 0 0 1 1 1 1
11 La moltiplicazione può anche essere svolta servendosi delle somme. La regola è
la seguente: ogni cifra 1 del moltiplicatore fa scorrere a sinistra le cifre del moltiplicando, aggiungendo tanti 0 quanti ne richiede la sua posizione. Tutti i numeri
così ottenuti vengono sommati tra loro.
Esempio: se devo moltiplicare 23 × 12, che convertiti in binario si presentano
così:
1 0 1 1 ×
1 1 0 0 =
–––––––––––––––––––––––––––––
1 0 1 1 1 0 0 0 ×
1 0 1 1 1 0 0 =
–––––––––––––––––––––––––––––––––––––
1 0 0 0 1 0 1 0 0
Moltiplicando
Moltiplicatore
Posizione 0 del moltiplicatore
Posizione 1
Posizione 2
Posizione 3
3 posti
2 posti
ARITMETICA DEL COMPUTER START – INFORMAZIONI E CALCOLATORI
37
Aritmetica binaria:
sottrazione e divisione
La sottrazione
Per quanto possa sembrare strano, i computer non sono in grado di sottrarre, ma solo di addizionare. Sottrarre
un numero, però, equivale ad addizionare un numero negativo. Per effettuare la sottrazione tra due o più numeri
binari bisogna tenere in considerazione le seguenti regole:
0–0 = 0
1–1 = 0
1–0 = 1
0–1 = 1 con prestito di 1
–
0
1
0
0
1
1
1
0
Sottraendo
Con prestito di 1
Minuendo
Facciamo un semplice esempio. Dati A = 101101 e B = 11010, otteniamo:
1
1
A
1 0 1 1 0 1 –
B
1 1 0 1 0 =
---------------------------A–B
1 0 0 1 1
Partendo da destra, 1 meno 0 è 1 senza bisogno di prestiti; o meno 1 richiede, invece, un prestito di 1 dalla
sinistra e quindi otteniamo 10 da cui, sottraendo 1, otteniamo 1; la cifra successiva, avendo prestato 1 a destra
diventa 0 che sottratta a 0 restituisce 0; 1 meno 1 dà 0 e così, iterativamente, fino al termine dell’operazione.
Per quanto possa sembrare strano, i computer non sono in grado di sottrarre, ma solo di addizionare. Sottrarre un
numero, però, equivale ad addizionare un numero negativo. Il computer, che lavora con 0 e 1, non può mettere
un segno meno davanti a un numero: per poterlo fare deve complementare a due il numero stesso. Il complemento sarà trattato in modo appropriato nelle prossime unità; per ora ti basti sapere che il complemento a due
consiste nel trasformare tutte le cifre del numero: gli 1 diventano 0 e gli 0 diventano 1. Poi, al numero ottenuto
si somma 1. Ecco un esempio:
5 – 0 1 0 1 –
3 = 0 0 1 1 =
----
2
Riporto
0 1 0 1 +
1 1 0 1 =
---------------1 0 0 1 0
Ora facciamo un esempio con il sistema decimale. Se dobbiamo sottrarre 6 da 13, procediamo nel seguente
modo:
• facciamo il complemento a 10 (perché stiamo usando il sistema decimale) del minuendo (6), ottenendo 4;
• sommiamo il complemento (4) al sottraendo (13) ottenendo 17;
• togliamo da quest’ultimo il 10 (sempre perché stiamo usando il sistema decimale) e otteniamo come risultato
7, infatti 13–6=7.
Ora riportiamo lo stesso esempio, ma questa volta usando il sistema binario:
•
•
•
•
38
il numero 13 diventa 1101, il numero 6 diventa 0110;
il complemento a 2 (binario) del numero 0110 (6) è 01010;
sommiamo questo numero al sottraendo: 01010+01101=10111 (23);
togliamo da quest’ultimo il numero 10000 (sarebbe 16 decimale perché 24=16, l’esponente è 4 perchè stiamo
usando 4 cifre) e otteniamo 00111 (7).
START – INFORMAZIONI E CALCOLATORI
ARITMETICA DEL COMPUTER
Hai notato? Invece di effettuare l’ultima sottrazione, basta togliere la cifra più significativa dal numero ottenuto sommando il complemento e il sottraendo. Infatti:
complemento+sottraendo=10111, togliamo la cifrà più significativa e otteniamo
0111; Se quest’ultima cifra è 1 il risultato è positivo, se è 0 il risultato è negativo.
La divisione
La divisione binaria di due numeri A e B si calcola in modo analogo alla divisione
decimale, ottenendo un quoziente Q e un resto R tali che A = B × Q + R. In pratica
la divisione binaria si riduce a una successione di sottrazioni, come puoi vedere nel
procedimento descritto di seguito.
Procedimento per la divisione binaria
1. Si considerano tante cifre del dividendo quante sono le cifre del divisore; se il nu-
mero binario espresso dalle cifre del dividendo considerate è minore del divisore,
si considera, se esiste, un’ altra cifra del dividendo; se, invece, non esiste, significa
che il quoziente Q è 0 e che il resto R è dato dal dividendo.
2. Una volta eseguito il passo precedente, si scrive 1 come cifra più significativa del
quoziente e si sottrae il divisore alle cifre considerate del dividendo.
3. Al risultato del passo precedente si aggiunge la cifra immediatamente più a destra
del dividendo; se il numero binario così ottenuto è maggiore del divisore si scrive
1 come ulteriore cifra del quoziente e si sottrae da esso il divisore; se, invece, il
numero binario è minore del divisore, si scrive 0 nel quoziente. Si aggiunge un’altra cifra del dividendo al numero, se esiste, e poi si scrive 1 come ulteriore cifra
del quoziente e si effettua la sottrazione.
4. Il passo precedente viene effettuato finché sono disponibili cifre del dividendo.
Quando le cifre del dividendo sono esaurite, il risultato dell’ultima sottrazione è
il resto R della divisione.
Vediamo subito un esempio che consente di chiarire meglio il concetto. Proviamo a
effettuare la seguente divisione:
1 1 0 1 1 0
1 0 1
1 1 1
1 0 1
1 0 0
1 0 1
1 0 1 0
Si considerano le cifre 110 del dividendo; il numero 110 è maggiore del divisore
101; si scrive 1 come prima cifra del quoziente e si calcola la differenza, ottenendo
come risultato 1.
Si abbassa la cifra 1 del dividendo, ottenendo così 11, che è minore del divisore; si
scrive 0 nel quoziente e si abbassa un’altra cifra del divisore ottenendo 111; si scrive
1 come ulteriore cifra del quoziente e si effettua la sottrazione che dà come risultato
10.
Si abbassa la cifra 0 dal dividendo e si ottiene 100, che è minore di 101; si scrive 0
come cifra meno significativa del quoziente.
Non esistono altre cifre del dividendo e il procedimento termina.
1010 è il quoziente, mentre 100 è il resto della divisione.
Come riprova abbiamo:
1 0 1 0 ×
1 0 1 =
------------------1 0 1 0
1 0 1 0 – –
------------------1 1 0 0 1 0 +
1 0 0 =
------------------1 1 0 1 1 0
quoziente ×
divisore
+ resto =
dividendo
ARITMETICA DEL COMPUTER START – INFORMAZIONI E CALCOLATORI
39
ex.]
Aritmetica binaria: sottrazione e divisione
1 Esegui la sottrazione fra i numeri binari 1101 e 1011.
1 1 0 1 –
1 0 1 1 =
–––––––––––––
(prestiti)
2 Esegui la sottrazione fra i numeri binari 10101 e 1011.
(prestiti)
1 0 1 0 1 –
1 0 1 1 =
––––––––––––––––
3 Esegui la sottrazione fra i numeri binari 11000 e 111.
(prestiti)
1 1 0 0 0 –
1 1 1 =
––––––––––––––––
4 Esegui la sottrazione fra i numeri binari 101101 e 11010.
(prestiti)
1 0 1 1 0 1 –
1 1 0 1 0 =
–––––––––––––––––––
5 Osserva attentamente il seguente esercizio, che utilizza un nuovo modo di eseguire una sottrazione tra due numeri binari.
Esegui le seguenti sottrazioni usando il complemento a 2.
•
01011 – 0100000
PROCEDIMENTO
•
La sottrazione A–B può essere eseguita sommando ad A il complemento a 2 di B.
SOLUZIONE:
Il complemento a 2 di 0100000 è 1100000.
0 1 0 1 1 +
1 1 0 0 0 0 0
––––––––––––––––––––––
1 1 0 1 0 1 1
(11) +
(–32)
––––––––––
(–21)
1101011 è un numero negativo in complemento a 2. Il suo valore assoluto è 0010101, ovvero 21. Quindi il risultato è –21.
Utilizzando questo metodo, prova a effettuare le sottrazioni riportate negli esercizi precedenti verificando se ottieni lo stesso risultato.
40
START – INFORMAZIONI E CALCOLATORI
ARITMETICA DEL COMPUTER
6 Osserva attentamente la seguente divisione tra due numeri binari e la successiva
prova di verifica.
Esegui la divisione fra i numeri binari 11011 e 11:
1 1 0 1 1
– – 0
– 1
1 1
1 1
1 0 0 1
(4°) 11: 11 = 1 con resto 0
(3°) 1: 11 = 0 con resto 1
(2°) 0: 11 = 0 con resto 0
(1°) 11: 11 = 1 con resto 0
Dunque 11011 : 11 = 1001 con resto 0, ovvero 1001 × 11 = 11011; facciamo la verifica:
1 0 0 1 ×
1 1 =
––––––––––––––––
1 0 0 1 +
1 0 0 1
––––––––––––––––
1 1 0 1 1
Ora esegui la seguente divisione:
11001 : 101 = con resto =
7 Osserva attentamente la seguente divisione tra due numeri binari e la successiva
prova di verifica.
Esegui la divisione fra i numeri binari 1101011 e 1011:
1 1 0 1 0 1 1
1 0 1 1
---------– – 1 0 0 1 1
1 0 1 1
------------------– 1 0 0 0
1 0 1 1
1 0 0 1
(4°) 10011: 1011 = 1 con resto 1000
(3°) 1001: 1011 = 0 con resto 1001
(2°) 100: 1011 = 0 con resto 100
(1°) 1101: 1011 = 1 con resto 10
Dunque 1101011 : 1011 = 1001 con resto 1000, ovvero 1011 × 1001 + 1000 = 1101011;
Facciamo la verifica:
1 0 1 1 ×
1 0 0 1 =
–––––––––––––
1 1
(riporti)
1 0 1 1 +
0 0 0 0
+
0 0 0 0
+
1 0 1 1
––––––––––––––––––––––
1 1 0 0 0 1 1
e sommando il resto:
1 1 0 0 0 1 1 +
1 0 0 0 =
---------------------1 1 0 1 0 1 1
Ora esegui la seguente divisione:
111101 : 111 = con resto =
ARITMETICA DEL COMPUTER START – INFORMAZIONI E CALCOLATORI
41
Il sistema ottale
Il sistema di numerazione posizionale ottale (o sistema in base 8) utilizza le seguenti 8 cifre per rappresentare tutti i numeri:
0 1 2 3 4 5 6 7
Un numero ottale, quindi, è composto da una sequenza di cifre comprese tra 0 e 7,
e i pesi associati a queste cifre sono, naturalmente, potenze di 8.
Posizione ...
Peso
...
6 5 4 3 2 1 0
86 85 84 83 82 81 80
.
.
1
8-1
2
8-2
3
8-3
4
8-4
5
8-5
...
...
Il numero ottale successivo a 7 (cioè il numero decimale 8) è 10, quello ancora successivo (cioè il decimale 9) è 11, e così via.
La conversione di un numero ottale nel suo equivalente decimale, e viceversa, avviene utilizzando le stesse regole descritte nei paragrafi precedenti.
Le conversioni
Passiamo quindi alle conversioni. Vediamo come convertire un numero ottale nel
suo corrispondente decimale.
Convertiamo il numero 253.4(8) in decimale servendoci della precedente tabella.
2 * 82 + 5 * 81 + 3 * 80 + 4 * 8–1 =
2 * 64 + 5 * 8 + 3 * 1 + 4 * 1/8 =
128 + 40 + 1 + 0.5 = 171.5
Quindi 253.4(8) = 171.5(10)
Proviamo ora il procedimento inverso: convertire un numero decimale nel suo corrispondente ottale.
Il numero decimale 22894.26 può essere convertito in ottale nel seguente modo:
Dividendo
22894
2861
357
44
5
Divisore
8
8
8
8
8
Quoziente
2861
357
44
5
0
Resto
6
5
5
4
5
Quindi 228944(10) = 54556(8). Ora convertiamo la parte decimale:
0.26 × 8 = 2.08la parte intera è 2
0.08 × 8 = 0.64la parte intera e 0
0.64 × 8 = 5.12la parte intera è 5
0.12 × 8 = 0.96la parte intera è 0
0.96 × 8 = 7.68la parte intera è 7
Ci fermiamo.
Il risultato finale è il seguente: 22894.26(10) = 54556.20507(8)
42
START – INFORMAZIONI E CALCOLATORI
ARITMETICA DEL COMPUTER
Le conversioni da ottale a binario e da binario a ottale sono immediate. Infatti, se
tieni presente che 8 = 23 e che, di conseguenza, qualsiasi cifra ottale è codificabile in
binario con tre bit, è facile affermare che:
• per convertire un numero ottale nel suo equivalente binario è sufficiente sostituire a ogni cifra ottale il gruppo di tre bit corrispondente alla sua rappresentazione
binaria;
• per convertire un numero binario nel suo equivalente ottale è sufficiente raggruppare a tre a tre tutte le cifre del numero binario, partendo da quella meno
significativa, e sostituire a ogni gruppo la cifra ottale equivalente.
Convertiamo il numero ottale 2614(8) in binario. Per facilitare il calcolo possiamo
servirci della seguente tabella:
Cifra ottale
0
1
2
3
4
5
6
7
2
Corrispondente
binario
000
001
010
011
100
101
110
111
6
1
4
010 110 001 100
Otteniamo che il numero binario corrispondente a 2614(8) è 10110001100(2).
Proviamo ora a convertire il numero binario 1101000111(2) . Cominciamo col raggruppare a tre a tre tutte le cifre partendo da quella meno significativa (cioè la prima
da destra). Avremo:
1 101 000 111
Come puoi notare, l’ultimo gruppo è composto da una sola cifra: aggiungiamo due
zeri in modo da formare un altro gruppo di tre.
001 101 000 111
E ora convertiamo:
001 101 000 111
1
5
0
7
Quindi 1101000111(2) = 1507(8)
Se il numero binario avesse avuto una parte frazionaria, il raggruppamento a tre a
tre sarebbe avvenuto:
• dal punto ottale verso sinistra per la parte intera;
• dal punto ottale verso destra per la parte frazionaria.
ARITMETICA DEL COMPUTER START – INFORMAZIONI E CALCOLATORI
43
Il sistema esadecimale
In questo sistema di numerazione posizionale la base è 16, pertanto occorrono 16
cifre per poter rappresentare i numeri. Precisamente:
0 1 2 3 4 5 6 7 8 9 A B C D E F
Avendo a disposizione solo dieci cifre numeriche, sono state inserite sei lettere
dell’alfabeto alle quali è stato associato un preciso valore: infatti la lettera A rappresenta il numero 10, la lettera B il numero 11 e così via fino alla lettera F che rappresenta il numero 15.
Dopo la lettera F i numeri esadecimali, come al solito, cominciano a essere composti
da due cifre: quindi 10 rappresenterà il 16 decimale, 11 il 17 decimale e così via.
Le conversioni
Per convertire un numero decimale nel suo equivalente esadecimale possiamo
utilizzare il rapido metodo delle divisioni successive.
Convertiamo il numero decimale 34728 nel suo equivalente esadecimale.
Dividendo
34728
2170
135
8
Divisore
16
16
16
16
Quoziente
2170
35
8
0
Resto
8
10
7
8
Quindi 34728(10) = 87A8(16)
Naturalmente, se il numero fosse stato frazionario avremmo dovuto convertire anche la sua parte frazionaria, utilizzando allo scopo il metodo delle moltiplicazioni
successive.
Per convertire un numero esadecimale nel suo corrispondente decimale adottiamo l’espressione in notazione espansa.
Convertiamo il numero esadecimale B95D in decimale. Avremo:
B * 163 + 9 * 162 + 5 * 161 + D * 160 =
11 * 4096 + 9 * 256 + 5 * 16 + 13 * 1 =
45056 + 2304 + 80 + 13 = 47453(10)
Le conversioni da binario a esadecimale e da esadecimale a binario sono praticamente immediate e rispecchiano il concetto riportato nella parte in cui abbiamo
trattato il sistema ottale. Infatti, se pensi che il numero 16(10), ossia la base del sistema esadecimale e, quindi, il numero di cifre di cui si serve, è uguale a 24(16), è chiaro
che le cifre esadecimali si possono esprimere in binario con quattro bit.
Da ciò segue che:
• per convertire un numero esadecimale nel suo equivalente binario è sufficiente
sostituire a ogni cifra esadecimale il gruppo di quattro bit corrispondente alla sua
rappresentazione binaria;
• per convertire un numero binario nel suo equivalente esadecimale è sufficiente
raggruppare a quattro a quattro tutte le cifre del numero binario partendo da quella meno significativa e sostituire a ogni gruppo la cifra esadecimale equivalente.
44
START – INFORMAZIONI E CALCOLATORI
ARITMETICA DEL COMPUTER
Convertiamo il numero esadecimale FA72(8) in binario. Per facilitare il calcolo possiamo servirci della seguente tabella.
Cifra
esadecimale
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
F
Corrispondente
binario
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
A
7
2
1111 1010 0111 0010
Otteniamo immediatamente che il numero binario corrispondente a FA72(16) è
1111101001110010(2).
Proviamo ora a convertire il numero binario 1001101000111(2). Cominciamo con
il raggruppare a quattro a quattro tutte le cifre partendo da quella meno significativa
(cioè la prima da destra). Avremo:
1 0011 0100 0111
L’ultimo gruppo è composto da una sola cifra, quindi dobbiamo aggiungere tre zeri
in modo da formare un altro gruppo di quattro.
0001 0011 0100 0111
E ora convertiamo:
0001 0011 0100 0111
1
3
4
7
Quindi 1001101000111(2) = 1347(16)
Proviamo, infine, con un numero frazionario. Convertiamo il numero binario
11110010.110111 in esadecimale. In questo caso il raggruppamento a quattro a
quattro deve avvenire:
• dal punto esadecimale verso sinistra per la parte intera;
• dal punto esadecimale verso destra per la parte frazionaria.
ARITMETICA DEL COMPUTER START – INFORMAZIONI E CALCOLATORI
45
LAVORARE CON TESTA
1
8
Come contavano gli Egiziani?
Nel loro sistema di numerazione i Romani utilizzavano:
a
dieci simboli
b
sette simboli
c
d
2
Su quale sistema di numerazione erano fondati
i sistemi attico e ionico?
dieci
b
sedici
c
In un sistema di numerazione la sintassi indica:
a
un insieme di azioni utili per stabilire come effettuare le operazioni tra i numeri
b
un insieme di simboli utili per costruire i numeri
c
ha il valore posizionale più alto
ha il valore posizionale più basso
Per effettuare il complemento a uno di un numero
binario:
a
si scambiano gli 1 con gli 0 e viceversa e si
aggiunge 1
b
si scambiano gli 1 con gli 0 e viceversa e si
sottrae 1
si scambiano gli 1 con gli 0 e viceversa
si inverte solo l’ultima cifra
effettuare il complemento a due di un numero
10 Per
binario:
un insieme di cifre con le quali costruire i numeri
d
a
si effettua il complemento a uno e poi si
aggiunge uno
b
si effettua la conversione in modulo e segno
e poi si aggiunge uno
c
un insieme di regole che specificano come costruire i vari numeri
si effettua la conversione in modulo e segno
e poi si invertono gli 1 con gli 0 e viceversa
d
Quali sono le differenze tra sistemi di numerazione
addizionali e sistemi posizionali?
partendo da destra (dalla cifra meno significativa) si lasciano invariati i bit fino a incontrare il
primo 1, invertendo tutti gli altri
11 Perché è così importante il complemento a due?
In un sistema posizionale, il valore facciale di una cifra
è legato:
a
alla posizione che la cifra occupa all’interno
del numero
b
alla forma della cifra
c
si effettua una somma con dei numeri binari,
12 Quando
in che cosa consiste il problema dell’overflow?
13 Stabilisci se la seguente affermazione è vera o falsa.
al valore dell’intero numero
d
non esiste il valore facciale di una cifra,
ma solo il suo valore posizionale
Per convertire un numero ottale nel suo equivalente
binario è sufficiente sostituire a ogni cifra ottale
il gruppo di tre bit corrispondente alla sua
rappresentazione binaria.------------------------------------------- v f
In un sistema di numerazione in base b caratterizzato
da N cifre possiamo rappresentare:
14 Stabilisci se la seguente affermazione è vera o falsa.
a
bN valori compresi tra 0 e bN–1
b
b*N valori compresi tra 0 e bN–1
c
N valori compresi tra 0 e bN–1
d
46
si trova più a destra
d
4
7
b
c
3
6
9
otto
Che cosa si intende con sistema di numerazione?
5
si trova più a sinistra
due
d
a
d
otto simboli
a
All’interno di un numero, la cifra più significativa è
quella che:
c
nove simboli
PROVE OGGETTIVE PER LA VERIFICA DELLE CONOSCENZE
b/N valori compresi tra 0 e bN–1
START – INFORMAZIONI E CALCOLATORI
ARITMETICA DEL COMPUTER
Per convertire un numero binario nel suo equivalente
esadecimale è sufficiente raggruppare a quattro
a quattro tutte le cifre del numero binario partendo
da quella meno significativa e sostituire a ogni
gruppo la cifra esadecimale equivalente.------------- v f
training
1 Scrivi in notazione polinomiale i seguenti numeri decimali:
134
1190
445
1101
445
110
2 Quali sono gli insiemi di cifre usati nei sistemi n base
6 e 9?
3 Quanti numeri binari si possono rappresentare con 8
bit?
4 Verifica se le seguenti corrispondenze sono vere:
a
1100102 = 5010
b
11112 = 1710
c
a
11101012 = 10210
b
110112 = 2710
0.111001
c
7 Calcola il corrispondente decimale dei seguenti
numeri binari frazionari:
0.010101
b
0.110111
c
123
198
17
9 Calcola il corrispondente binario dei seguenti numeri
decimali:
1098
256
1086
899
787
10 Calcola il corrispondente binario dei seguenti numeri
decimali frazionari:
0.12
0.234
0.27
0.56
11 Calcola il corrispondente binario dei seguenti numeri
decimali frazionari:
0.78
0.656
0.222
0.159
12 Converti i seguenti numeri decimali negativi in binario
utilizzando il complemento a 2:
–58
–97
553
–122
776
346
7034
67
15 Calcola i numeri decimali equivalenti ai seguenti
numeri ottali:
0.45
13A
0.7
A32BCD
66.04
56.13
DF8
5CE6F
ABD
B4A6
AB1F
18 Calcola i numeri decimali equivalenti ai seguenti
numeri esadecimali:
0.AD
0.54
15D.A4
19 Calcola i numeri esadecimali equivalenti ai seguenti
numeri decimali:
7546
90765
8 Calcola il corrispondente binario dei seguenti numeri
decimali:
103
–111
3453
79965
9975
20 Calcola i numeri esadecimali equivalenti ai seguenti
numeri decimali:
0.010110
10
750
0.6
0.10110
a
–100
14 Calcola i numeri decimali equivalenti ai seguenti
numeri ottali:
54AB
6 Calcola il corrispondente decimale dei seguenti
numeri binari frazionari:
b
–253
17 Calcola i numeri decimali equivalenti ai seguenti
numeri esadecimali:
11100011102 = 23710
0.00100
–159
16 Calcola i numeri decimali equivalenti ai seguenti
numeri esadecimali:
1000012 = 3910
a
13 Converti i seguenti numeri decimali negativi in binario
utilizzando il complemento a 2:
0.57
5 Verifica se le seguenti corrispondenze sono vere:
c
PROVE APERTE PER LA VERIFICA DELLE ABILITÀ
–92
–12
11122
5643
8756
21 Senza effettuare le conversioni dei seguenti numeri
binari interi, stabilisci se i corrispondenti decimali
sono pari o dispari:
a
1100010
b
1110011
c
1100
d
111111100011
22 Senza effettuare le conversioni dei seguenti numeri
binari interi, stabilisci se i corrispondenti decimali
sono divisibili per una potenza del 2. In caso affermativo indica anche la potenza:
a
111001
b
1000
c
1100110
d
1100
–120
ARITMETICA DEL COMPUTER START – INFORMAZIONI E CALCOLATORI
47
Rappresentazione delle informazioni
I dati appartengono a diverse categorie. Partendo da un primo criterio è facile osservare che nella nostra quotidianità abbiamo a che fare con:
• dati che simboleggiano oggetti concreti o reali (per esempio una sedia);
• dati che simboleggiano oggetti astratti o concetti (per esempio il concetto di
amore o l’oggetto astratto numero 3).
Rifletti: per l’oggetto concreto sedia si può realizzare una rappresentazione grafica
tale da consentire il riconoscimento a qualsiasi individuo; ciò non accade, invece,
per il concetto di amore, che, pur potendosi rappresentare graficamente (per esempio con un cuore) potrebbe dar adito ad ambiguità. Questo non accade per la sedia,
la cui rappresentazione è universalmente riconosciuta.
Anche il numero tre viene espresso graficamente con il simbolo arabo 3. In sostanza, che cosa abbiamo fatto? Abbiamo associato a un concetto o a un oggetto una
sua rappresentazione simbolica. In termini più rigorosi possiamo affermare quanto
segue:
La rappresentazione è una legge m che associa a un oggetto concreto o a un
concetto una sequenza di simboli presi da un opportuno alfabeto.
Dominio
Sedia
Codominio
m(sedia) =
m(amore) =
Amore
Tre
m(tre) =
Informazioni
3
Simboli
Il problema ora è quello di rappresentare queste informazioni all’interno di un
computer.
Da quanto detto sinora è ovvio che non è possibile rappresentare le informazioni viste poc’anzi con i simboli che abbiamo associato, dovremo utilizzarne altri.
Abbiamo visto che tutto ciò che viene fornito al computer è immediatamente tradotto in precise sequenze di 0 e di 1, ma per quale motivo la macchina utilizza soltanto
due simboli? La risposta è semplice: per motivi di efficienza.
Rifletti. Il numero tre può avere varie rappresentazioni: quella romana (III) oppure
quella classica araba (3), poiché la funzione di rappresentazione (m) non è univoca.
48
START – INFORMAZIONI E CALCOLATORI
CODIFICA DELL’INFORMAZIONE NUMERICA E ALFANUMERICA
Per rappresentare un dato all’interno di un computer occorre scegliere un metodo
efficiente, nel senso che tale rappresentazione deve essere facilmente:
• memorizzabile;
• trasmissibile;
• elaborabile.
A titolo di esempio, analizziamo il numero romano VIII: tale rappresentazione è efficiente nella memorizzazione, perché si usano pochi simboli, però non è efficiente
in fase di elaborazione, perché le operazioni aritmetiche con i numeri romani sono
tutt’altro che semplici. Pensa ai giapponesi che utilizzano ideogrammi composti
da decine di migliaia di simboli, oppure al vecchio ma sempre attuale alfabeto
Morse, composto da soli due simboli (il tratto e il punto). Ognuno dei due sistemi
ha vantaggi e svantaggi: per esempio, se si vuole esprimere un concetto abbastanza
complesso quale “ti voglio molto bene” potrebbe bastare un ideogramma, mentre
con l’alfabeto Morse occorre una sequenza di punti e linee, ma sicuramente tale sequenza sarà molto più precisa di quanto non possa esserlo l’ideogramma. È proprio
per questo motivo, cioè per evitare ambiguità nell’interpretazione di ogni simbolo,
che nel computer si utilizzano solo i simboli 0 e 1.
Vedremo come si rappresentano informazioni numeriche e alfanumeriche, ma ciò
che ci preme sottolineare sin d’ora è che, a prescindere dal tipo, tutte le informazioni
saranno rappresentate mediante numeri.
Dato e informazione
Stiamo per affrontare lo studio di come i dati vengono rappresentati all’interno di
un computer. Prima di iniziare, poniamoci una domanda: è corretto parlare di rappresentazione dei dati o rappresentazione dell’informazione?
Esiste una differenza tra dato e informazione? Scopriamolo insieme.
Dal dizionario De Mauro Paravia, l’informazione è un “elemento o dato che permette di venire a conoscenza di qualcosa” (definizione generale), un “qualsiasi messaggio inviato secondo un determinato codice da un [...] trasmettitore a un ricevente”
(definizione scientifica).
In sintesi possiamo affermare che:
L’informazione riguarda i dati, si codifica tramite un codice e fornisce conoscenza.
Analizziamo questa importante definizione.
I dati consistono di fatti, per esempio: 125/70 mmHg.
L’informazione è costituita da dati che assumono significato in un certo contesto, per
esempio: la pressione è 125/70 mmHg (ossia 125 la massima e 70 la minima).
La conoscenza definisce le relazioni tra diversi tipi di informazioni, per esempio:
se la pressione di un paziente è superiore a 135/95 mmHg in tre diverse occasioni,
allora il paziente ha una pressione sanguigna alta.
Sistemi esperti
Sistemi
informativi
Conoscenza
Informazione
Database
Dati
CODIFICA DELL’INFORMAZIONE NUMERICA E ALFANUMERICA START – INFORMAZIONI E CALCOLATORI
49
Il codice
In precedenza abbiamo detto che l’informazione si codifica tramite un codice: vediamo che cosa
significa ciò.
Affinché un dato diventi informazione, deve essere interpretato tramite un codice, secondo il
contesto di riferimento. Storicamente i primi codici furono il Morse, del 1840, seguito dal linguaggio delle bandiere usato in marina. Una sequenza di punti e linee non è informazione, se
non riusciamo a interpretarla! È necessario conoscere il codice.
Un codice comprende due componenti distinte: un alfabeto per descrivere come rappresentare il dato e una semantica per descrivere come interpretarlo.
Alfabeto del codice Morse
C
Informazione
Dato
28
0
1
2
8
2
3
7
9
4
6
5
Alfabeto
un
numero
intero
Semantica
Codice
50
I
A
Semantica del codice Morse
O
Un esempio di codice si ha anche nelle domande di un questionario, come nel
seguente esempio.
Che cos’è l’informatica?
a. Lo studio del calcolatore.
b. La scienza che studia l’informazione.
c. Saper scrivere programmi.
Per questa domanda, l’alfabeto è costituito dai simboli “a”, “b” e “c”, mentre la
semantica associata è il testo della risposta. Tramite questo codice, quindi, specifichiamo come un dato (per esempio “b”) debba essere interpretato come “La
scienza che studia l’informazione.” affinché fornisca informazione
Formalmente, un alfabeto è un insieme di simboli. Una parola è una sequenza
di tali simboli. Nell’esempio della figura, l’alfabeto relativo all’età di un uomo
(alfabeto decimale) è l’insieme dei simboli {0, 1, 2, ..., 8, 9}.
Il dato “28” è rappresentato nell’alfabeto decimale dalla parola composta dalla
sequenza di 2 e 8.
Bit e byte
Così come si utilizza il metro per misurare le distanze e il grammo per stabilire
il peso di un corpo, allo stesso modo anche il mondo dell’informatica ha una
propria unità di misura, impiegata nello specifico per misurare la quantità di
informazioni. Proprio come il metro dispone di vari multipli (fra cui il più usato
è sicuramente è il chilometro), allo stesso anche l’unità di misura informatica
avrà bisogno di unità multiple che consentano di esprimere in forma più compatta quantità molto elevate: è più pratico utilizzare “100 chilometri” oppure
START – INFORMAZIONI E CALCOLATORI
CODIFICA DELL’INFORMAZIONE NUMERICA E ALFANUMERICA
“100.000 metri”? Ma le analogie non finiscono qui: se esiste il “chilometro al secondo” per le
velocità, allo stesso modo il mondo dei computer ha avuto la necessità di realizzare unità di
misura composte per trattare problemi simili.
L’unità di misura “naturale” dell’informazione è il bit, ossia una cifra binaria, che è considerato
come la più piccola quantità di informazione concepibile per un computer.
Ma come può un computer che gestisce solamente il concetto di 0 e 1 trattare anche numeri più
grandi di zero e uno e caratteri alfanumerici concreti? Semplicemente utilizzando una particolare codifica di memorizzazione, cioè codificando in sequenze di 0 e 1 qualsiasi altro simbolo!
La più importante sequenza di 0 e 1 è composta da 8 bit e prende il nome di byte; è in grado di
assumere 28 = 256 possibili valori (da 0 a 255).
Come abbiamo appena visto, esprimere una grandezza in bit oppure in byte è indifferente;
del resto è la stessa cosa affermare che una distanza misura 100 centimetri oppure 1 metro: la
sostanza è la stessa, cambia solo l’unità di misura di riferimento. Per consuetudine si preferisce
utilizzare il byte per misure spaziali (“Questo documento occupa 5.000 byte”, oppure “Questa
memoria ha una capienza di 64.000.000 di byte”) e il bit per misure di velocità (“Questo collegamento a Internet permette di trasferire 56.000 bit al secondo”).
È importante ricordare che, per il trattamento dei dati, i computer operano su configurazioni
composte da un numero fisso di byte, chiamate parole o word. La dimensione delle parole può
essere di:
Word da 16 bit
• 1 byte (8 bit);
1 byte 1 byte
• 2 byte (16 bit);
• 4 byte (32 bit);
Word da 32 bit
• 8 byte (64 bit).
1 byte 1 byte 1 byte 1 byte
Word da 64 bit
1 byte 1 byte 1 byte 1 byte 1 byte 1 byte 1 byte 1 byte
Il tempo per elaborare una parola è convenzionalmente costante, quindi la lunghezza della parola rappresenta un importantissimo indice per la velocità di calcolo e la potenza di un computer.
Gli attuali sistemi di elaborazione gestiscono enormi quantità di dati codificati in binario. Pensa
semplicemente a quanti dati sono memorizzati sul disco fisso del tuo computer! Il byte, quindi,
è troppo piccolo per misurare queste enormi quantità. Servono i multipli.
Prefisso
Si legge Multiplo del byte
Fattore moltiplicativo
Valore approssimativo (byte)
K
Kilo
103
210 =1.024
Mille
M
Mega
106
220 = 1.048.576
Un milione
G
Giga
109
230 = 1.073.741.824
Un miliardo
T
Tera
1012
240 = 1.099.511.627.776
Un bilione (mille miliardi)
P
Peta
1015
250 = 1.125.899.906.842.624
Un biliardo
E
Exa
1018
260 = 1.152.921.504.606.846.976
Un trilione
Z
Zetta
1021
270 = 1.180.591.620.717.411.303.424
Un triliardo
Y
Yotta
1024
280 = 1.208.925.819.614.629.174.706.176
Un quadrilione
Nella tabella precedente puoi osservare che:
1M=1K*K
1G=1K*M
1T=1K*G
I fattori moltiplicativi sono tutti potenze di 2, ma per semplicità si adotta anche la convenzione
di utilizzare potenze di 10. Quindi, quando diciamo che un sistema di elaborazione è in grado
di memorizzare 100 GB di dati, significa che può memorizzare circa 100 miliardi di byte.
Attenzione a non confondere il simbolo K informatico (il K maiuscolo) con il k minuscolo impiegato per esempio in fisica, che vale 103 (cioè 1000).
CODIFICA DELL’INFORMAZIONE NUMERICA E ALFANUMERICA START – INFORMAZIONI E CALCOLATORI
stop
51
Codifica e decodifica
dell’informazione
Ora cerchiamo di consolidare i nuovi concetti appresi. È ormai evidente che l’alfabeto interno
della macchina è rappresentato dai due simboli (0 e 1) del sistema binario, mentre l’utente colloquia con la macchina utilizzando allo scopo un alfabeto esterno composto da:
•
•
•
•
26 lettere maiuscole dell’alfabeto;
26 lettere minuscole dell’alfabeto;
10 cifre decimali;
caratteri vari (simboli di valuta, segni di interpunzione, simboli matematici e così via).
Come abbiamo visto, accostando opportunamente i simboli di un alfabeto è possibile costruire
delle parole. Disponendo di un solo bit si possono rappresentare due simboli; con due bit se ne
possono rappresentare 4, con tre bit 8, con 4 bit 16 e così via, secondo la formula Y = 2X.
Ciò significa che disponendo di X bit possiamo rappresentare Y caratteri, pari a 2 elevato
all’esponente X.
Verifichiamo la formula realizzando il bit con una lampadina, che quando è accesa chiamiamo
1 e quando è spenta chiamiamo 0. Vogliamo, per esempio, rappresentare le 26 lettere dell’alfabeto più i segni ! ? / % ( ).
Cominciamo con l’utilizzare una sola lampada. Abbiamo due soli valori a disposizione: 1 (accesa) e 0 (spenta). Conveniamo, allora, che disponendo di una sola lampadina possiamo rappresentare la lettera A quando è accesa e la lettera B quando è spenta. E gli altri segni? Riproviamo
aggiungendo un’altra lampada. Con entrambe le lampade possiamo formare quattro combinazioni acceso–spento: 00, 10, 01, 11, alle quali associamo i caratteri A, B, C, D.
Ancora non basta. Continuiamo prendendo un’altra lampadina, la terza, che ci porta a configurare 8 caratteri, perchè 23 = 8, dalla lettera A alla lettera H.
Continuiamo ancora: con 5 lampade arriviamo a configurare i 32 caratteri che volevamo.
00 = A
10 = B
01 = C
11 = D
Tornando al discorso appena introdotto sui due alfabeti, per avere una “conversazione” con il
computer è necessario che vi sia una corrispondenza biunivoca tra i due: a ogni simbolo dell’al000 = A
001 = B
010 = C
100 = D
52
START – INFORMAZIONI E CALCOLATORI
CODIFICA DELL’INFORMAZIONE NUMERICA E ALFANUMERICA
101 = E
110 = F
011 = G
111 = H
fabeto esterno dovrà corrispondere uno e un solo simbolo di quello interno. Tale
corrispondenza l’abbiamo chiamata codice.
Quando introduciamo delle informazioni all’interno del computer, utilizziamo
simboli dell’alfabeto esterno: questi, però, prima di poter essere memorizzati ed
elaborati, dovranno essere tradotti nei corrispondenti simboli dell’alfabeto interno.
Viceversa, i risultati dell’elaborazione dovranno essere tradotti in caratteri dell’alfabeto esterno, prima che il computer possa comunicarli. La traduzione da alfabeto
esterno ad alfabeto interno viene detta codifica, mentre la traduzione inversa viene
detta decodifica.
A questo punto potremmo anche dire che all’interno del computer tutte le informazioni sono rappresentate in codice.
Ogni computer ha un suo codice particolare, diverso (in parte o completamente)
da quello di altri elaboratori. La scelta del codice di un computer è ispirata a criteri
di ottimizzazione costruttiva, come accade per esempio per le rappresentazioni dei
numeri, dove adottare un certo tipo di codice significa semplificare enormemente i
circuiti dell’unità di calcolo e di controllo.
Prima di descrivere in dettaglio i principali codici utilizzati dal computer, è necessario chiarire un’importante differenza. In precedenza abbiamo detto che accostando
opportunamente i simboli dell’alfabeto è possibile ottenere delle parole.
Parole del nostro alfabeto esterno, quindi, potrebbero essere:
mamma
informatica
ciao
20149
20a30
Analizziamo la parola 20149: potrebbe rappresentare un codice di un cliente, un
numero telefonico, un codice di avviamento postale, la targa di una moto o, ancora,
l’importo di una bolletta. Con questo vogliamo dire che non tutti i dati espressi
con simboli numerici rappresentano, effettivamente, numeri: affinché possano
essere considerati tali, infatti, deve essere possibile effettuare operazioni aritmetiche su di essi.
Nel nostro particolare caso, quindi, la parola 20149 è un numero solo se rappresenta, per esempio, l’importo di una bolletta.
Questa distinzione è importantissima, in quanto ci consente di distinguere i metodi
di codifica dei numeri in due grandi categorie:
• metodi che rappresentano il valore numerico;
• metodi che rappresentano le cifre.
I metodi che rappresentano il valore considerano il valore di quell’insieme di simboli
(informazioni numeriche), mentre quelli che rappresentano le cifre “vedono” il numero solo come un insieme di simboli (informazioni alfanumeriche).
CODIFICA DELL’INFORMAZIONE NUMERICA E ALFANUMERICA START – INFORMAZIONI E CALCOLATORI
53
Rappresentazione
delle informazioni alfanumeriche
L’unica soluzione che si può adottare per la rappresentazione di informazioni di tipo non numerico (caratteri
alfabetici, cifre, segni diacritici e caratteri speciali) è quella di codificare ogni carattere con una particolare configurazione binaria.
Con un byte si può rappresentare un carattere alfabetico qualsiasi, una cifra o un simbolo speciale. Disponendo
di 8 bit possiamo ottenere 28 caratteri diversi, cioè 256. Avendo a disposizione ben 256 caratteri, ogni casa costruttrice di hardware potrebbe costruire un apposito codice di caratteri realizzabili. Grazie a un accordo tra tutti
i produttori di hardware è stato però realizzato un codice di riferimento, il codice ASCII (American Standard Code
for Information Interchange), che in inglese si pronuncia askey, mentre in italiano può essere pronunciato anche asci.
Il codice ASCII nacque a 7 bit, ma poi venne portato a 8 bit (ASCII esteso).
54
START – INFORMAZIONI E CALCOLATORI
CODIFICA DELL’INFORMAZIONE NUMERICA E ALFANUMERICA
Questo codice mantiene l’ordinamento alfabetico, in quanto, se un carattere precede
un altro, il suo codice, considerato come un numero binario, è minore.
In base a questo codice, per rappresentare la parola CASA occorrono 4 byte e la rappresentazione in memoria è la seguente:
01000011
C
01000001
A
01010011
S
01000001
A
Non ci credi? Un’esperienza concreta per focalizzare questo concetto è quella di
aprire Blocco note, digitare la stringa ciao! e poi salvare il documento: quanto sarà
grande il file così generato? Si tratta di cinque caratteri, ognuno pari a un byte per
quanto visto poco fa... quindi in totale 5 byte.
E se volessimo conoscere la stessa grandezza espressa in termini di bit? Ricordando
che un byte è pari a 8 bit, basta moltiplicare 5 byte×8 bit=40 bit. Possiamo dire indifferentemente, quindi, che il nostro documento occupa 5 byte oppure 40 bit.
Questo codice viene utilizzato prevalentemente su personal computer. Come puoi
notare dalla figura precedente, i primi 32 caratteri hanno un aspetto singolare: sono
i cosiddetti caratteri di controllo, che non fanno parte dell’alfabeto visualizzabile
(stampabile), ma provocano effetti specifici (spostamenti verticali e orizzontali su
video e cancellazione di caratteri, e così via) oppure vengono interpretati come caratteri di significato speciale (fine di una sequenza di caratteri, separatore e così via).
Se osservi bene la figura che riporta il codice ASCII noterai che la codifica dei caratteri numerici e alfabetici è rigorosamente crescente: grazie a questo ordinamento è
possibile operare confronti tra singoli caratteri e stringhe come se fossero numeri.
L’introduzione di memorie sempre più capaci e la necessità di codificare molti altri
caratteri ha portato allo sviluppo di un nuovo codice: l’UNICODE, che mette a disposizione dell’utente 216 = 65536 caratteri. Con questo codice è possibile codificare
le lettere e le cifre delle principali lingue del mondo, anche di quelle che utilizzano
ideogrammi come il giapponese e il cinese. Questo codice è di estrema importanza
poiché permette di operare su dati e programmi provenienti da tutto il mondo.
CODIFICA DELL’INFORMAZIONE NUMERICA E ALFANUMERICA START – INFORMAZIONI E CALCOLATORI
55
Rappresentazione binaria dei numeri
Numeri interi senza segno
Per rappresentare un numero intero senza segno si utilizza la conversione dalla rappresentazione
decimale in quella a base 2 (sistema binario puro), dettagliatamente descritta nella parte dedicata
all’aritmetica dei computer.
Numeri interi con segno
Per rappresentare un numero relativo è necessario disporre di un’informazione sul segno. Nel sistema decimale la rappresentazione più comune è quella modulo e segno, a cui siamo abituati sin dalle
elementari e che consiste nell’utilizzare il segno + per gli interi positivi e il segno – per quelli negativi.
Nel sistema binario naturalmente si può usare lo stesso metodo, premettendo il segno + o il segno –
alla rappresentazione in base 2 del numero (sistema binario puro).
Considerato che il segno può essere positivo o negativo (e quindi può assumere solo due valori),
tale informazione nella rappresentazione binaria può essere associata a uno specifico bit. Si assume,
quindi, che il valore 0 rappresenti il segno + (numero positivo), mentre il valore 1 rappresenti il segno – (numero negativo).
In pratica, disponendo di N bit, si utilizzeranno N–1 bit per rappresentare il valore del modulo (ossia
del valore assoluto del numero) e 1 bit per rappresentare il segno. Tale rappresentazione prende
appunto il nome di rappresentazione in modulo e segno.
Per esempio, se disponiamo di soli 3 bit, il primo bit a sinistra sarà impiegato per esprimere il segno
e i restanti 2 bit per il modulo. Così, delle 23 = 8 combinazioni, 4 avranno uno 0 a sinistra e 4 un 1
a sinistra:
Positivi
+0
+1
+2
+3
000
001
010
011
Negativi
100
–0
101
–1
110
–2
111
–3
In questo modo avremmo per i numeri positivi la successione 0, 1, 2, 3 e analogamente, per i numeri
negativi, la successione 0, –1, –2, –3.
C’è un evidente ambiguità nella rappresentazione dello zero, poiché sono possibili due diverse
rappresentazioni dello stesso numero (+0, –0). È come se esistesse uno zero positivo e uno zero
negativo! Per eliminare questa ambiguità si ricorre a una rappresentazione in complemento a due,
che consiste nel rappresentare i numeri negativi attraverso un’operazione di complementazione del
corrispondente positivo. In generale, l’operazione di complementazione si effettua cambiando gli 1
con 0 e vice versa.
Sono possibili due forme di complementazione: complementazione a uno e complementazione
a due. Per motivi di ordine pratico relative a operazioni di calcolo si preferisce l’operazione di complementazione a due.
Per ottenere il complemento a due di un numero si procede nel seguente modo:
• si effettua il complemento a 1 del numero stesso, che consiste nel cambiare gli 0 in 1 e viceversa;
• si somma il valore 1 al complemento a uno.
Facciamo un esempio. Se consideriamo ancora 3 bit, il numero 010 rappresenta +2. Per ottenere il
valore corrispondente negativo procederemo così:
010numero positivo (+2)
101complemento a 1 (gli 0 vengono cambiati in 1 e viceversa)
1 somma 1
110numero negativo in complemento a 2 (–2)
È importante ricordare che, se c’è un riporto nel bit di segno, questo non viene considerato.
56
START – INFORMAZIONI E CALCOLATORI
CODIFICA DELL’INFORMAZIONE NUMERICA E ALFANUMERICA
Non ci crederai, ma esiste un metodo ancora più semplice per ottenere il complemento a 2 di un numero: consiste nel lasciare invariati i bit del numero a partire da
destra fino al primo 1, invertendo tutti gli altri. Per esempio, il complemento a 2 del
numero binario 10100100 è 01011100, infatti a partire da destra (dalla cifra meno
significativa) lasciamo invariati i bit fino a incontrare il primo 1, mentre tutti gli altri li
invertiamo.
stop
Attraverso la complementazione a 2, nel caso di 3 bit possiamo rappresentare la
seguente sequenza:
Valore
+3
+2
+1
+0
–1
–2
–3
–4
Rappresentazione in complemento a 2
011
010
001
000
111
110
101
100
Avendo a disposizione 4 bit si potranno rappresentare più numeri, come riportato
nella seguente tabella:
Valore
+7
+6
+5
+4
+3
+2
+1
+0
–1
–2
–3
–4
–5
–6
–7
–8
Rappresentazione in complemento a 2
0111
0110
0101
0100
0011
0010
0001
0000
1111
1110
1101
1100
1011
1010
1001
1000
Possiamo fare due importanti osservazioni. La prima riguarda il tipo di disposizione
circolare dei numeri binari: a partire dallo 0 verso l’alto la numerazione si raccorda
tra il massimo positivo (+3) e il massimo negativo (–4).
La seconda osservazione, ben più rilevante, è che attraverso la rappresentazione in
complemento a 2 non c’è simmetria, dal momento che il massimo numero negativo
è di una unità superiore (in valore assoluto) al corrispondente numero positivo.
Questo è il prezzo che si deve pagare per non avere nessuna ambiguità nella rappresentazione dei numeri relativi. Dati N bit, la rappresentazione in complemento a 2
consentirà una numerazione bipolare i cui valori estremi (positivi e negativi) sono
rispettivamente:
–2N–1 e +2N–1–1
Per esempio, disponendo di 16 bit complessivi e volendo rappresentare numeri relativi si avranno come limiti estremi –32768, +32767. Questa apparente limitazione
dovuta all’asimmetria non porta ad alcun inconveniente nella pratica. Naturalmente
il procedimento di complementazione è ancora applicabile per ottenere il corrispondente positivo di un numero negativo dato.
La rappresentazione in complemento a due è molto diffusa e una certa classe di dati
numerici viene rappresentata secondo tale formato.
CODIFICA DELL’INFORMAZIONE NUMERICA E ALFANUMERICA START – INFORMAZIONI E CALCOLATORI
57
app.//
Rappresentazione binaria dei numeri
Rappresentiamo in complemento a 2 su 4 cifre i numeri +3 e –6
+3 è positivo ed è rappresentato come 0011.
–6 è negativo, per cui procediamo nel seguente modo:
• il numero binario corrispondente è 0110;
• il complemento bit a bit è 1001;
• sommiamo 1 e otteniamo il complemento a 2 cioè 1010.
Rappresentiamo in modulo e segno e complemento a 2 su 10 bit
i numeri –31 e –109
Prendiamo in esame il numero decimale –31 e vediamo come procedere:
Il numero binario corrispondente al numero decimale 31 è
Dovendolo scrivere su 10 bit dobbiamo aggiungere cinque zeri alla
sinistra del numero; avremo quindi
Per la rappresentazione in modulo e segno dobbiamo partire dalla
rappresentazione binaria del valore assoluto del numero e
impostare a 1 il bit del segno, quindi
Per giungere alla rappresentazione in complemento a 2 basta
partire dalla rappresentazione binaria del valore assoluto del
numero e invertire tutti i bit partendo dal primo 1 (escluso) che
incontriamo, quindi
11111
0000011111
1000011111
1111100001
Esaminiamo ora il numero –109:
Il numero binario corrispondente al numero decimale 109 è
Dovendolo scrivere su 10 bit dobbiamo aggiungere tre zeri alla
sinistra del numero; avremo quindi
Per la rappresentazione in modulo e segno dobbiamo partire dalla
rappresentazione binaria del valore assoluto del numero e
impostare a 1 il bit del segno, quindi
Per giungere alla rappresentazione in complemento a 2 basta
partire dalla rappresentazione binaria del valore assoluto del
numero e invertire tutti i bit partendo dal primo 1 (escluso) che
incontriamo, quindi
1101101
0001101101
1001101101
1110010011
Rappresentiamo in complemento a 2 su 5 bit alcuni numeri decimali
Consideriamo i seguenti numeri:
Numero decimale
+11
–8
+1
–1
+10
–10
58
START – INFORMAZIONI E CALCOLATORI
Numero binario
01011
01000
00001
00001
01010
01010
Complemento a 1
Complemento a 2
10111
11000
11110
11111
10101
10110
CODIFICA DELL’INFORMAZIONE NUMERICA E ALFANUMERICA
A quali numeri decimali corrispondono i seguenti numeri binari rappresentati in modulo e segno e in complemento a 2?
100110
11110
111
0101
PROCEDURA
• In modulo e segno elimina il bit del segno e calcola il valore assoluto in notazione decimale. Il risultato sarà il valore assoluto se il bit di segno è 0, oppure il
corrispondente numero negativo se il bit di segno è 1.
• In complemento a 2, se il bit di segno è 1, calcola la rappresentazione binaria del
valore assoluto del numero invertendo tutti i bit partendo dal primo 1, escluso,
che incontri leggendo la stringa binaria da destra verso sinistra. Calcola quindi il
valore assoluto in notazione decimale. Il risultato sarà il corrispondente numero
negativo. Se invece il bit di segno è 0, allora il numero è positivo e basta calcolarne la rappresentazione decimale senza invertire i bit.
SOLUZIONE
100110 è negativo perché il bit del segno vale 1.
In modulo e segno il valore assoluto è 000110 = 6, quindi il risultato è –6.
In complemento a 2 il valore assoluto diventa 011010 = 26, quindi il risultato ottenuto è –26.
11110 è negativo perché il bit del segno vale 1.
In modulo e segno il valore assoluto è 01110 = 14, quindi il risultato è –14.
In complemento a 2 il valore assoluto diventa 00010 = 2,quindi il risultato è –2.
111 è negativo perché il bit del segno vale 1.
In modulo e segno il valore assoluto è 011 = 3, quindi il risultato è –3.
In complemento a 2 il valore assoluto diventa 001 = 1, quindi il risultato è –1.
0101 è positivo perché il bit del segno vale 0.
In modulo e segno il valore assoluto è 0101 = 5, quindi il risultato è 5.
In complemento a 2 il risultato è lo stesso ottenuto per modulo e segno, ovvero 5.
Scriviamo i seguenti numeri decimali nelle varie codifiche in binario puro,
modulo e segno, complemento a 1, complemento a 2, tutte su 7 bit
Decimale
Binario puro
15
–15
–19
–27
–63
–64
1111
–1111
–10011
–11011
–111111
–1000000
+63
+64
111111
1000000
+127
1111111
–45
–101101
Modulo
e segno
0001111
1001111
1010011
1011011
1111111
Non
rappresentabile
0111111
Non
rappresentabile
Non
rappresentabile
1101101
Complemento Complemento
a1
a2
0001111
00001111
1110000
1110001
1101100
1101101
1100100
1100101
1000000
1000001
Non
1000000
rappresentabile
0111111
0111111
Non
Non
rappresentabile rappresentabile
Non
Non
rappresentabile rappresentabile
1010010
1010011
CODIFICA DELL’INFORMAZIONE NUMERICA E ALFANUMERICA START – INFORMAZIONI E CALCOLATORI
59
ex.]
Rappresentazione binaria dei numeri
1 Converti i numeri decimali (6, –6) in binario puro, modulo e segno, complemento
a 1, complemento a 2, su 4 bit.
Binario puro
+6_______________________________________
–6_______________________________________
Modulo e segno
+6_______________________________________
–6_______________________________________
Complemento a 1
+6_______________________________________
–6_______________________________________
Complemento a 2
+6_______________________________________
–6_______________________________________
2 Converti i numeri decimali (9, –9) in binario puro, modulo e segno, complemento
a 1, complemento a 2, su 4 bit.
Binario puro
+9_______________________________________
–9_______________________________________
Modulo e segno
+9_______________________________________
–9_______________________________________
Complemento a 1
+9_______________________________________
–9_______________________________________
Complemento a 2
+6_______________________________________
–6_______________________________________
3 Rappresenta in modulo e segno e complemento a 2 i seguenti numeri negativi su
8 bit:
–28, –44, –126
Il numero binario corrispondente al numero decimale –28 è
Dovendolo scrivere su 8 bit dobbiamo aggiungere ______ zeri alla
sinistra del numero: avremo, quindi
Per la rappresentazione in modulo e segno dobbiamo partire dalla
rappresentazione binaria del valore assoluto del numero e
impostare a 1 il bit del segno, quindi
Per giungere alla rappresentazione in complemento a 2 basta
partire dalla rappresentazione binaria del valore assoluto del
numero e invertire tutti i bit partendo dal primo 1 (escluso) che
incontriamo, quindi
60
START – INFORMAZIONI E CALCOLATORI
CODIFICA DELL’INFORMAZIONE NUMERICA E ALFANUMERICA
Il numero binario corrispondente al numero decimale 44 è
Dovendolo scrivere su 10 bit dobbiamo aggiungere _______ zeri
alla sinistra del numero: avremo, quindi
Per la rappresentazione in modulo e segno dobbiamo partire dalla
rappresentazione binaria del valore assoluto del numero e
impostare a 1 il bit del segno, quindi
Per giungere alla rappresentazione in complemento a 2 basta
partire dalla rappresentazione binaria del valore assoluto del
numero e invertire tutti i bit partendo dal primo 1 (escluso) che
incontriamo, quindi
Il numero binario corrispondente al numero decimale 126 è
Dovendolo scrivere su 10 bit dobbiamo aggiungere _______ zeri
alla sinistra del numero: avremo, quindi
Per la rappresentazione in modulo e segno dobbiamo partire dalla
rappresentazione binaria del valore assoluto del numero e
impostare a 1 il bit del segno, quindi
Per giungere alla rappresentazione in complemento a 2 basta
partire dalla rappresentazione binaria del valore assoluto del
numero e invertire tutti i bit partendo dal primo 1 (escluso) che
incontriamo, quindi
4 Scrivi i seguenti numeri decimali nelle varie codifiche in binario puro, modulo e
segno, complemento a 1, complemento a 2, tutte su 8 bit.
Decimale
Binario
puro
Modulo
e segno
Complemento a 1 Complemento a 2
–10
+25
–59
–47
–35
+31
–37
5 Converti in modulo e segno e in complemento a 2 i seguenti numeri interi con
segno:
–32, –31, +15, +16, –46, –18, –4, +31.
Indica, per ognuno, il numero di bit necessari per rappresentarlo.
Decimale
Binario
puro
Modulo
e segno
Complemento a 1 Complemento a 2
–10
+25
–59
–47
–35
+31
–37
CODIFICA DELL’INFORMAZIONE NUMERICA E ALFANUMERICA START – INFORMAZIONI E CALCOLATORI
61
Rappresentazione dei numeri reali
Rappresentazione in virgola fissa
Una possibile codifica dei numeri reali è quella in virgola fissa (fixed point) in cui si
stabilisce un numero di cifre a disposizione per la parte intera, un numero a disposizione per la parte frazionaria e un bit per rappresentare il segno. È detta a virgola
fissa poiché la posizione della virgola (o punto decimale) è stabilita una volta per
tutte, ovvero i posti per rappresentare le cifre dopo la virgola sono prefissati e quindi
la virgola viene pensata sempre allo stesso posto.
Segno
7 bit per rappresentare
la parte intera
8 bit per rappresentare
la parte frazionaria
Qui è idealmente
localizzata la virgola
Per esempio:
+1,25 si rappresenta come +0000001.00011001
–8,0 si rappresenta come –0001000.00000000
Il numero minimo rappresentabile con questo formato è:
Nmin= – 1111111.11111111 = –(27 –1),(28 –1)
Il numero massimo è:
Nmax= + 1111111.11111111 = +(27 –1),(28 –1)
Come abbiamo visto per gli interi, anche per i numeri reali ci riferiamo sempre a
un sottoinsieme. Nella rappresentazione in virgola fissa i numeri sono rappresentati
con una certa approssimazione. Per esempio, 5,37 (periodico) 5,373737373737...
assumerebbe la rappresentazione in virgola fissa:
+0000005.37373737
che ha un numero di cifre decimali inferiore a quelle reali.
Analogamente, il numero irrazionale 2=1,414213562... verrebbe troncato a:
+0000001.41421356.
Quindi occorre prestare attenzione, perché espressioni come 1/3+1/3+1/3=1, perfettamente valide in matematica, non sono generalmente valide se eseguite su un computer; infatti 1/3 verrebbe approssimato in +00000000.33333333 e quindi la somma delle tre frazioni dell’espressione darebbe per risultato +00000000.99999999,
che è diverso da 1.
Il sistema a virgola fissa, essendo basato su un numero di posti fisso per la rappresentazione delle cifre dopo la virgola, può comportare la perdita più o meno grave
di numerose cifre significative e ha, quindi, campi di applicazione specifici.
62
START – INFORMAZIONI E CALCOLATORI
CODIFICA DELL’INFORMAZIONE NUMERICA E ALFANUMERICA
Rappresentazione in virgola mobile (floating point)
Per risolvere gli inconvenienti della rappresentazione in virgola fissa è stata studiata
la rappresentazione in virgola mobile (floating point), diventata poi quella più usata
dai costruttori di computer. L’idea è quella di far variare dinamicamente (floating in
inglese significa mobile, fluttuante) la posizione della virgola.
In questo caso il numero viene espresso secondo la notazione scientifica, cioè scisso
in due parti:
1. la mantissa, che rappresenta un numero compreso tra 0,100000... e 0,99999...;
2. l’esponente, che indica la potenza di 10 per cui occorre moltiplicare la mantissa
al fine di ottenere il numero che si intende rappresentare.
Consideriamo il numero 8,41. Per esprimerlo in notazione scientifica dobbiamo
procedere con un’operazione di normalizzazione, che consiste nel portare il punto
decimale immediatamente a sinistra della prima cifra diversa da zero della mantissa:
il punto quindi si muove verso l’inizio della prima parte del numero, moltiplicandolo per un opportuno esponente.
Il numero 8,41 normalizzato diventa:
0.841 × 10
che, a sua volta, può essere espresso come:
0.841 × 101 = 0.841E+1
dove la lettera E sta per “10 elevato all’esponente” (+1).
Questa notazione è molto comoda per rappresentare numeri grandi; per esempio, la
massa della terra, che si dovrebbe scrivere nella consueta notazione come:
6 000 000 000 000 000 000 000 000 kg
in notazione scientifica si esprime come:
0.6 × 1025 = 0.6E+25
Generalizzando, il criterio per rappresentare un numero in forma normalizzata è il
seguente: ogni numero può essere rappresentato come prodotto di un numero decimale e di una potenza di 10, in modo tale che la parte intera del numero decimale
risulti sempre uguale a 0 e la prima cifra decimale risulti sempre diversa da 0. Per
ottenere questo risultato, l’esponente di 10 è calcolato secondo la seguente regola: se
il numero dato è in valore assoluto maggiore di 1, l’esponente è positivo e uguale al
numero delle cifre intere; se il numero dato è in valore assoluto minore di 1, l’esponente è negativo e uguale al numero degli zeri dopo la virgola.
Vediamo qualche esempio:
812
= 0.812E+3
–812 = –0.812E+3
–0.007 = –0.7E–2
Osserviamo che il numero 0 non può obbedire a questa regola e occorre quindi stabilire la sua forma normalizzata, per esempio: 0,0.
Oggigiorno non sono più i singoli progettisti o produttori di sistemi a stabilire il
codice da usare per la rappresentazione floating point dei numeri all’interno di un
sistema di calcolo. La soluzione di questo problema ha ormai raggiunto un livello
di maturità tale da consentire a organismi internazionali di definire degli standard a
cui tutti i progettisti e costruttori si devono adeguare. In particolare, lo standard più
diffuso è quello stabilito dall’IEEE (Institute of Electrical and Electronics Engineering) e
identificato dalla sigla 754. Questo standard prevede due formati di rappresentazione, uno in “precisione normale” codificato su 32 bit e uno in “doppia precisione”
codificato su 64 bit.
Inoltre lo standard prevede che:
• la mantissa venga rappresentata in modulo e segno;
• l’esponente (o caratteristica) venga rappresentato in modo polarizzato.
CODIFICA DELL’INFORMAZIONE NUMERICA E ALFANUMERICA START – INFORMAZIONI E CALCOLATORI
63
app.//
Rappresentazione dei numeri reali
Abbiamo detto che lo standard IEEE 754 prevede 32 bit per rappresentare un valore in
virgola mobile a precisione singola. I 32 bit a disposizione saranno così organizzati:
Segno:
0 – positivo
1 – negativo
Esponente (8 bit)
Mantissa (23 bit)
In particolare:
• 1 bit per il segno;
• 8 bit di esponente polarizzato biased 127 (detto anche in eccesso 127);
• 23 bit di parte frazionaria (mantissa).
31 30
S
23 22
Esponente
0
Mantissa
All’interno di questi 32 bit, quindi, sarà inserita una successione di cifre binarie il cui
valore sarà quello del numero reale.
Rappresentiamo in singola precisione il numero reale decimale
43,6875(10)
I passi da svolgere sono i seguenti.
1. CALCOLARE IL SEGNO DEL NUMERO
Per il segno è necessario inserire 1 se il numero è negativo e 0 se è positivo.
Nel nostro caso, essendo il numero positivo, il valore da inseire nel bit riservato al
segno è 0.
31 30
23 22
0
0
S
Esponente
Mantissa
2. TRASFORMARE IL NUMERO SENZA SEGNO IN FORMA BINARIA
Utilizzando il metodo delle divisioni successive, convertiamo la parte intera 43 in
binario. Otterremo:
Dividendo
43
21
10
5
2
1
64
START – INFORMAZIONI E CALCOLATORI
Divisore
2
2
2
2
2
2
Quoziente
21
10
5
2
1
0
CODIFICA DELL’INFORMAZIONE NUMERICA E ALFANUMERICA
Resto
1
1
0
1
0
1
Quindi 43(10) = 101011(2).
Procediamo, ora, con la conversione della parte decimale 0,6875, servendoci del
metodo delle moltiplicazioni successive:
0,6875 × 2 = 1,375
0,375 × 2 = 0,75
0,75 × 2 = 1,5
0,5 × 2 = 1,0
parte intera 1
parte intera 0
parte intera 1
parte intera 1
Quindi la parte frazionaria 0,6875(10) = 1011(2).
Complessivamente, 43,6875(10) = 101011.1011(2).
3. NORMALIZZARE IL NUMERO BINARIO OTTENUTO
Spostiamo la virgola verso sinistra lasciando solo un 1 a sinistra. Otteniamo:
1.010111011 × 25
4. COMPLETARE LA MANTISSA FINO A COPRIRE TUTTI I BIT A DISPOSIZIONE
Stiamo rappresentando un numero reale in precisione singola, quindi abbiamo a
disposizione 23 bit per la mantissa. Dobbiamo inserire in coda al numero ottenuto
(cioè alla sua destra) tanti zeri fino a completare i 23 bit. Otteniamo, quindi:
1.01011101100000000000000
31 30
23 22
0
0
0 1 0 1 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
S
Esponente
Mantissa
5. CONVERTIRE L’ESPONENTE
L’esponente che abbiamo ottenuto durante la fase di normalizzazione è pari a 5.
Secondo lo standard IEEE 754, l’esponente deve essere polarizzato nel senso che
al valore dell’esponente originario occorre sommare un certo valore fisso chiamato
bias. Nel caso di numeri in precisione singola, il bias è pari a 127.
Abbiamo, quindi, 5 + 127 = 132(10) = 10000100(2).
31 30
0
S
23 22
0
1 0 0 0 0 1 0 0 0 1 0 1 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Esponente
Mantissa
Ricapitoliamo. Convertiamo il numero decimale 4568,1875 in floating point su 32
bit.
Effettuo
il cambiamento
di base
4568,187510
1000111011000.0011
Normalizzo
la mantissa
1000111011000.0011 × 212
Esprimo l’esponente
in eccesso 127
12 + 127 = 139 –> 10001011
0 1 0 0 0 0 1 0 0 0 1 0 1 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Rappresento
i dati con il corretto
numero di bit
CODIFICA DELL’INFORMAZIONE NUMERICA E ALFANUMERICA START – INFORMAZIONI E CALCOLATORI
65
app.//
Rappresentazione dei numeri reali
Rappresentiamo, ora, un valore negativo in virgola mobile a precisione singola (32 bit). Il numero da rappresentare è –11,375(10).
1. CALCOLARE IL SEGNO DEL NUMERO
Per il segno è necessario inserire 1 se il numero + negativo e 0 se è positivo.
Nel nostro caso, essendo il numero negativo, inseriamo 1.
31 30
23 22
0
1
S
Esponente
Mantissa
2. TRASFORMARE IL NUMERO SENZA SEGNO IN FORMA BINARIA
Utilizzando il metodo delle divisioni successive, convertiamo la parte intera 43 in
binario.
Dividendo
11
5
2
1
Divisore
2
2
2
2
Quoziente
5
2
1
0
Resto
1
1
0
1
Quindi 11(10)=1011(2) Procediamo ora con la conversione della parte decimale 0,375:
0,375 x 2 = 0,75
0,75 x 2 = 1,5
0,5 x 2 = 1,0
parte intera 0
parte intera 1
parte intera 1
Quindi la parte frazionaria 0,375(10) = 011(2). Complessivamente, 11,375(10) = 1011.011(2)
3. NORMALIZZARE IL NUMERO BINARIO OTTENUTO
Spostiamo la virgola verso sinistra lasciando solo un 1 a sinistra. Otteniamo:
1.011011 * 23
4. COMPLETARE LA MANTISSA SINO A COPRIRE TUTTI I BIT A DISPOSIZIONE
Siamo in precisione singola per cui abbiamo a disposizione 23 bit per la mantissa.
Dobbiamo inserire in coda al numero ottenuto tanti zeri sino a completare i 23 bit.
Otteniamo, quindi:
1.01101100000000000000000
31 30
23 22
1
S
0
0 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Esponente
Mantissa
5. CONVERTIRE L’ESPONENTE
L’esponente che abbiamo ottenuto durante la fase di normalizzazione è pari a 3 a
cui occorre sommare il bias 127. Abbiamo, quindi, 3 + 127 = 130(10) = 10000010(2).
66
START – INFORMAZIONI E CALCOLATORI
CODIFICA DELL’INFORMAZIONE NUMERICA E ALFANUMERICA
31 30
1
23 22
0
1 0 0 0 0 0 1 0 0 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
S
Esponente
Mantissa
Rappresentiamo il numero reale –0,005(10)
Questa volta velocizziamo le operazioni considerato che, oramai, dovrebbero essere
chiare.
Per quanto riguarda il segno sappiamo che è pari a 1 poiché il numero è negativo.
31 30
23 22
0
1
S
Esponente
Mantissa
Nella trasformazione del numero decimale in binario ci dobbiamo occupare solo
della parte frazionaria (e quindi del sistema delle moltiplicazioni successive) poiché
la parte intera è pari a zero. Procedendo con le moltiplicazioni otteniamo il seguente
numero binario:
0,005(10) = 0.0000000101000111101011100001010(2).
Per normalizzare il numero dobbiamo portare la virgola in posizione immediatamente successiva al primo 1. A differenza dei precedenti esercizi, questa volta
dobbiamo andare verso destra di otto posizioni per cui la forma normalizzata sarà
caratterizzata da un esponente negativo del 2:
1.01000111101011100001010 * 2-8
La mantissa non necessita di alcun completamento poiché le cifre sono proprio pari
a 23.
31 30
23 22
1
0
0 1 0 0 0 1 1 1 1 0 1 0 1 1 1 0 0 0 0 1 0 1 0
S
Esponente
Mantissa
Occupiamoci, ora, dell’esponente. L’esponente che abbiamo ottenuto durante la
fase di normalizzazione è pari a -8 a cui, sappiamo, dobbiamo sommare il bias 127.
Abbiamo, quindi,
–8+127 = 119(10) = 01110111(2)
La rappresentazione ottenuta è:
31 30
1
S
23 22
0
0 1 1 1 0 1 1 1 0 1 0 0 0 1 1 1 1 0 1 0 1 1 1 0 0 0 0 1 0 1 0
Esponente
Mantissa
LA RAPPRESENTAZIONE DEI NUMERI IN PRECISIONE DOPPIA
Per quanto riguarda la precisione doppia occorre solo tener presente che i 64 bit a
disposizione sono così strutturati:
• 1 bit per il segno;
• 11 bit per l’esponente polarizzato biased 1023
• 52 bit per la mantissa.
63 62
S
0
52 51
Esponente
Mantissa
I calcoli sono analoghi a quelli visti per la precisione singola, con la sola variante
del bias che, in questo caso, è pari a 1023. È evidente che la precisione doppia è
utilizzata quando si vogliono rappresentare numeri con molte cifre.
CODIFICA DELL’INFORMAZIONE NUMERICA E ALFANUMERICA START – INFORMAZIONI E CALCOLATORI
67
ex.]
Rappresentazione dei numeri reali
1 Rappresenta in virgola mobile a precisione singola (32 bit) il numero –49,526(10)
1. Calcola il segno del numero.
31 30
S
23 22
Esponente
Mantissa
2. Trasforma il numero senza segno in forma binaria.
Convertiamo la parte intera _______ in binario.
Dividendo
49
24
Divisore
2
Quoziente
24
Resto
1
Quindi ___________(10) = _________________(2)
Procediamo, ora, con la conversione della parte decimale ____________ servendoci
del metodo delle moltiplicazioni successive:
_________ x 2 = ___________
parte intera _____
_________ x 2 = ___________
parte intera _____
_________ x 2 = ___________
parte intera _____
_________ x 2 = ___________
parte intera _____
……
Quindi la parte frazionaria ________________(10) = __________________(2)
Complessivamente, _______________(10) = ______________________(2)
3. Normalizza il numero binario ottenuto.
________________________________________________________________
4. Completa la mantissa sino a coprire tutti i bit a disposizione.
31 30
S
23 22
Esponente
0
Mantissa
5. Converti l’esponente.
L’esponente che abbiamo ottenuto durante la fase di normalizzazione è pari a ___ a cui
occorre sommare (o sottrarre?) ______. Abbiamo, quindi, _______________________.
31 30
S
68
0
START – INFORMAZIONI E CALCOLATORI
23 22
Esponente
0
Mantissa
CODIFICA DELL’INFORMAZIONE NUMERICA E ALFANUMERICA
2 Rappresenta in virgola mobile a precisione singola (32 bit) il numero 625,00137(10)
1. Calcola il segno del numero.
31 30
S
23 22
Esponente
Mantissa
2. Trasforma il numero senza segno in forma binaria.
Convertiamo la parte intera _______ in binario.
Dividendo
Divisore
Quoziente
Resto
Quindi ___________(10) = _________________(2)
Procediamo, ora, con la conversione della parte decimale ____________ servendoci
del metodo delle moltiplicazioni successive:
_________ x 2 = ___________
parte intera _____
_________ x 2 = ___________
parte intera _____
_________ x 2 = ___________
parte intera _____
_________ x 2 = ___________
parte intera _____
……
Quindi la parte frazionaria ________________(10) = __________________(2)
Complessivamente, _______________(10) = ______________________(2)
3. Normalizza il numero binario ottenuto.
________________________________________________________________
4. Completa la mantissa sino a coprire tutti i bit a disposizione.
31 30
S
23 22
Esponente
Mantissa
5. Converti l’esponente.
L’esponente che abbiamo ottenuto durante la fase di normalizzazione è pari a ___ a cui
occorre sommare (o sottrarre?) ______. Abbiamo, quindi, _______________________.
31 30
23 22
CODIFICA DELL’INFORMAZIONE NUMERICA E ALFANUMERICA START – INFORMAZIONI E CALCOLATORI
69
LAVORARE CON TESTA
1
2
3
Che cosa indichiamo con il termine rappresentazione?
Qual è la differenza tra dato e informazione?
All’interno del seguente elenco individua l’elemento
che non caratterizza un codice:
c d a
b
alfabeto
sintassi
semantica
grammatica
In base al seguente alfabeto: {a, e, i, o, u} come definiresti il concetto di parola?
5
6
Che cos’è un bit?
una configurazione di 16 bit
una configurazione di 32 bit
c una configurazione di 8 bit
d una configurazione di 2 bit
Quante configurazioni diverse possono essere realizzate con un byte?
32
c
8
9
256
Che cos’è una parola di memoria?
a Una configurazione composta da un numero
fisso di byte
b Una configurazione composta esclusivamente da
2 o 4 byte
c Una configurazione composta da 8 o 16 byte
d Una configurazione composta da un numero
variabile di byte
I
computer
colloquiano
se
esiste
una
___________________________ tra i due: ad ogni
simbolo
dell’alfabeto
_____________
dovrà
corrispondere ________________ solo di quello
____________. Tale corrispondenza viene detta
____________________.
v
f
15 Ila complemento a 2 di 1100100 è
0010110
0011000
c 0011100
d 0011101
b
La rappresentazione in complemento a 2 di un
numero è l’opposto della rappresentazione dello
stesso in complemento a 1
consiste la rappresentazione dei numeri
17 Inrealichein cosa
virgola fissa?
18 Come è strutturato un numero in notazione scientifica?
tra i seguenti è la rappresentazione corretta in
19 Quale
formato scientifico del numero 2745?
1.2745 E +3
0.2745 E +4
c 0.2745 E +1
d 0.2745 E -4
b
bit prevede lo standard IEEE 754 per i numeri
20 Quanti
in precisione singola?
bit prevede lo standard IEEE 754 per i numeri
21 Quanti
in precisione doppia?
standard IEEE 754 prevede che per i numeri in
22 Lo
precisione singola l’esponente venga codificato polarizzato biased 127. Cosa significa?
START – INFORMAZIONI E CALCOLATORI
f
a
Completa la seguente frase:
L’alfabeto interno della macchina è rappresentato dai ____________ del sistema _______________,
mentre l’utente colloquia utilizzando un alfabeto
esterno composto da ___________________________
_____________________________________
70
v
16 Stabilisci se la seguente affermazione è vera o falsa:
128
d
Il codice ASCII serve per codificare solo
i caratteri alfabetici e segni diacritici----------------------
che cosa consiste la rappresentazione dei numeri in
14 Inmodulo
e segno? Per quale tipologia di numeri si usa?
b
b
b
Il codice UNICODE mette a disposizione
dell’utente 65536 caratteri----------------------------------------
a
8
nella sua versione estesa è un codice a 7 bit
codifica ogni carattere con una particolare
configurazione binaria
c codifica 256 caratteri
d non prevede il bit di parità
a
13 Stabilisci se la seguente affermazione è vera o falsa:
Un byte è
a
10 In cosa consiste la fase di decodifica dell’informazione?
11 Il codice ASCII
12 Stabilisci se la seguente affermazione è vera o falsa:
4
7
PROVE OGGETTIVE PER LA VERIFICA DELLE CONOSCENZE
CODIFICA DELL’INFORMAZIONE NUMERICA E ALFANUMERICA
training
PROVE APERTE PER LA VERIFICA DELLE ABILITÀ
1 Rappresenta la frase “Studio informatica” nel codice
ASCII.
12 Verifica con tre esempi che il complemento a 2 del
complemento a 2 di un numero è proprio il numero di
partenza.
2 Rappresenta la frase “Ciao a tutti” nel codice ASCII.
13 Rappresenta i numeri decimali 3 e –3 nella forma
complemento a 2 usando:
3 Considera la seguente sequenza di bit e determina la
codifica ASCII:
• 4 bit
• 6 bit
1100 0011 1001 0100 1000 0100 1001 0110
• 8 bit
4 Rappresenta i numeri interi compresi tra –5 e +5 nella
forma valore assoluto con segno con 4 bit.
5 Rappresenta nella forma valore assoluto con segno
con 6 bit i seguenti numeri:
–13
27
14 Rappresenta i numeri decimali:
5
–25 –7
8 Rappresenta nella forma in complemento a 1 con 6
bit i numeri decimali descritti nell’esercizio n. 4.
• 8 bit
15 Scrivi i seguenti numeri decimali:
25
–2,
+9,
84
–84
124
nelle varie codifiche in:
• modulo e segno
• complemento a 1
• complemento a 2
–9
10 Rappresenta in modulo e segno su 6 bit i seguenti
numeri:
+14,
–25
• binario puro
9 Rappresenta in complemento a due su 6 bit i seguenti numeri:
+9,
nella forma complemento a 2 usando:
• 6 bit
7 Rappresenta i numeri compresi tra –7 e 7 nella forma
complemento a 1 con 4 bit.
–2,
20
• 4 bit
6 Rappresenta nella forma complemento a 2 con 6 bit i
numeri decimali descritti nell’esercizio n. 4.
+14,
15
tutte su 7 bit.
16 Scrivi i seguenti numeri decimali:
–9
100
11 Rappresenta i seguenti numeri decimali:
–75 –123 125 64
200 –200 110
–110
nelle varie codifiche in:
• binario puro
nelle seguenti codifiche:
• modulo e segno
• forma complemento a con 8 bit;
• complemento a 1
• forma complemento a 2 con 10 bit;
• complemento a 2
• forma valore assoluto con segno con 12 bit.
tutte su 8 bit.
CODIFICA DELL’INFORMAZIONE NUMERICA E ALFANUMERICA START – INFORMAZIONI E CALCOLATORI
71
training
PROVE APERTE PER LA VERIFICA DELLE ABILITÀ
17 Scrivi i seguenti numeri decimali:
25 Scrivi i numeri corrispondenti alle seguenti rappresentazioni in formato scientifico:
–11 –2 –111 112 –113
0.23E4 0.5E9 0,711E-4
nelle varie codifiche in:
26 Scrivi i numeri corrispondenti alle seguenti rappresentazioni in formato scientifico:
• binario puro
• modulo e segno
0.555E-1 0.81E-6 0.747E5
• complemento a 1
• complemento a 2
27 Rappresenta i seguenti numeri decimali in precisione
singola secondo lo standard IEEE 754:
tutte su 8 bit.
–12,56
18 Scrivi i seguenti numeri decimali:
45,25 –234,875 67,75 –83,8125
nelle varie codifiche in:
• binario puro
• modulo e segno
12,12 –12,12 1,22222 –100,101
• complemento a 2
tutte su 8 bit.
19 Rappresenta i seguenti numeri decimali in virgola fissa:
–12,3
25,21
–31,01
+5
–21
+126
–100
200
–200
2,852 119,6754 0,00000001 100,100
22222,222
23 Normalizza i seguenti numeri decimali:
117,385 9,6754 0,0000456 10,000005
1,00000001
24 Normalizza i seguenti numeri decimali:
0.00000000000111 111111.111
72
START – INFORMAZIONI E CALCOLATORI
• virgola mobile in singola precisione
• virgola mobile in doppia precisione
• virgola fissa
• virgola mobile in singola precisione
• virgola mobile in doppia precisione
22 Normalizza i seguenti numeri decimali:
0.00000110 100.000
30 Rappresenta il numero reale 23,56 in:
31 Rappresenta il numero reale –11,13 in:
21 Esprimi i seguenti numeri decimali in una rappresentazione binaria su 8 bit con eccesso 127:
100
in codifica binaria secondo lo standard IEEE 754 (in
singola precisione a 32 bit).
• virgola fissa
20 Esprimi i seguenti numeri decimali in una rappresentazione binaria su 8 bit con eccesso 127:
0
in codifica binaria secondo lo standard IEEE 754 (in
singola precisione a 32 bit).
29 Esprimi i seguenti numeri decimali:
• complemento a 1
-0,004
28 Esprimi i seguenti numeri decimali:
–200 –201 –203 –201 –200
0,003
32 A quali numeri decimali corrispondono i seguenti numeri binari rappresentati in modulo e segno e in complemento a 2?
• 100110
• 11110
• 111
• 0101
(Come procedere:
• In modulo e segno elimina il bit del segno e calcola il valore assoluto in notazione decimale. Il
risultato sarà il valore assoluto se il bit di segno
è 0, oppure il corrispondente numero negativo
se il bit di segno è 1.
CODIFICA DELL’INFORMAZIONE NUMERICA E ALFANUMERICA
training
• In complemento a 2, se il bit di segno è 1,
calcola la rappresentazione binaria del valore assoluto del numero invertendo tutti i bit partendo
dal primo 1, escluso, che si incontra leggendo la
stringa binaria da destra verso sinistra.
• Calcola quindi il valore assoluto in notazione decimale. Il risultato sarà il corrispondente numero
negativo. Se invece il bit di segno è 0, allora il
numero è positivo e basta calcolarne la rappresentazione decimale senza invertire i bit.)
33 Quale valore reale in virgola mobile IEEE 754 è rappresentato dalla seguente sequenza di bit?
1 01100000 01000000000000000000000
(Qualche suggerimento: il segno è evidente,
converti in decimale il valore dell’esponente e
sottrai 127, converti in decimale la mantissa.
Una volta ottenuti i valori decimali, normalizza
la mantissa, aggiungici uno, e, infine, moltiplica
tra loro i valori del segno, dell’esponente e della
mantissa.
34 Dati i seguenti numeri binari floating point, dove il
primo bit rappresenta il segno, i successivi 8 bit la
caratteristica con eccesso t=127 e i restanti 23 bit la
mantissa, determina il numero in base 10 rappresentato.
A = 11000000101000000000000000000000
(sol: -5)
B = 01000001110011000000000000000000
(sol: 25.5)
PROVE APERTE PER LA VERIFICA DELLE ABILITÀ
35 Sia data la seguente stringa di 12 cifre binarie:
101101110000
Trova il valore della stringa interpretata come:
a
intero senza segno
b
intero negativo in complemento a due
Converti in base 8 i valori assoluti dei numeri ricavati
nei casi (a) e (b), e sommali.
36 Trova la codifica floating-point su 32 bit (standard
IEEE 754) di 12,610 ed esprimila in notazione esadecimale:
12,610 = 1100,10012
Bisogna normalizzare la mantissa
1,10010012 * 23 , quindi E = 3
Segno +, quindi il bit 31 della codifica deve essere
posto a 0Codifica degli 8 bit relativi all’esponente e:
e = E + 127 , quindi e = 3 + 127 = 130
in binario 100000102
Per quanto riguarda la mantissa bisogna ricordare
che essa è periodica, per cui nei 23 bit riservati si
inserisce, partendo da sinistra verso destra, la parte
non periodica della mantissa, poi la parte periodica.
Quest’ultima è replicata fino al riempimento di tutti i
bit a disposizione, quindi:
10010011001100110011001
in definitiva:
01000001010010011001100110011001
in esadecimale:
0100.0001.0100.1001.1001.1001.1001.1001
4 1
4
9
9
9
9
9
4149999916
CODIFICA DELL’INFORMAZIONE NUMERICA E ALFANUMERICA START – INFORMAZIONI E CALCOLATORI
73
La codifica delle immagini
Attraverso l’informazione digitale anche le immagini e i suoni sono stati trasformati
in numeri (in lunghe sequenze di 0 e 1, che il computer è in grado di elaborare).
Per il testo è più facile comprendere i meccanismi che favoriscono l’elaborazione da
parte del computer, poiché il testo scritto è costruito accostando fra loro delle unità discrete (i singoli caratteri), selezionate all’interno di un alfabeto limitato. Dati
multimediali come immagini e suoni apparentemente potrebbero invece sembrare
analogici, cioè composti da informazioni di tipo “continuo” (pensa ai toni di grigio,
alla frequenza, alle tonalità di colore e così via).
Come si fa a codificare le infinite differenze e sfumature di un’immagine o di un
suono? Per comprendere in che modo il problema sia stato risolto, partiamo da una
semplice riflessione. Le immagini che appaiono su un televisore o sul monitor di un
computer risultano di norma semplici da interpretare: è semplice identificare forme,
riconoscere un attore; ma se ci avviciniamo molto al video, possiamo notare che
quella che a una certa distanza appare un’immagine ben definita, nitida e continua,
si trasforma in un’immagine sgranata, composta da tanti piccoli puntini luminosi e
colorati: i pixel (termine inglese che, come sappiamo, corrisponde alla contrazione
dei due termini picture elements). Tutto ciò è assolutamente normale, poiché le immagini che vediamo sui monitor sono in realtà il
risultato dell’accostamento dei tanti singoli segnali
luminosi emessi da ogni pixel. L’impressione di nitidezza e continuità dipende esclusivamente dalla
griglia di pixel: quanto più è fitta, ossia quanti più
pixel ci sono in un centimetro o in un pollice, tanto
migliore sarà l’impressione di un’immagine nitida
e continua (vedi la figura a fianco). Per ottenere la
codifica digitale dell’immagine è necessario rappresentare i vari pixel mediante numeri. Come per
il testo, quindi, è necessario utilizzare una tavola
di corrispondenza che, in questo caso, invece di
riportare l’associazione tra numeri e caratteri, contenga una corrispondenza tra numeri e colori, o tra numeri e gradazioni di colore, a seconda del formato utilizzato.
Agli inizi degli anni Ottanta nacquero i primi PC in grado di elaborare la grafica:
utilizzavano griglie molto larghe, tanto che i pixel sullo schermo più che minuscoli
puntini erano quadrati abbastanza visibili e i colori che si potevano utilizzare erano
esclusivamente il bianco e nero, o al massimo 8/16 colori diversi.
L’effetto non era assolutamente soddisfacente: grafica grezza, eccessivamente lineare, pochi colori. È sufficiente dare uno sguardo a queste immagini e confrontarle con
quelle incredibilmente realistiche degli attuali videogiochi per rendersi conto dei
progressi compiuti nel campo della grafica computerizzata e dell’enorme aumento
di peso in bit. I primi computer riuscivano a gestire una griglia di 80 colonne per
60 righe, quindi di 4800 pixel (80 × 60 = 4800). Limitando i colori al bianco e al
nero, era possibile rappresentare ogni pixel mediante un solo bit: in particolare l’1
per rappresentare il nero e lo 0 per il bianco. Avendo a disposizione 4800 bit, si riusciva a codificare un’immagine in bianco e nero, ma era comunque poco per avere
un’immagine ben definita. Aumentando il numero di bit otteniamo una griglia più
fine e abbiamo a disposizione un maggior numero di colori (in termini tecnici si
parla di aumento della profondità di colore o profondità di bit). Possiamo anche
usare alternativamente queste due possibilità.
Supponiamo di voler aumentare il numero di colori: se per ogni pixel decidiamo
di utilizzare un byte anziché un solo bit, invece di utilizzare solo il bianco e il nero
possiamo codificare ben 256 colori diversi (con 8 bit è possibile utilizzare 28 = 256
combinazioni di 0 e 1).
74
START – INFORMAZIONI E CALCOLATORI
CODIFICA DELL’INFORMAZIONE MULTIMEDIALE
Parlare di immagini a 256 colori o 8 bit significa, quindi, che la palette di colori
(l’insieme dei colori utilizzati) è codificata nel modo appena descritto. Se avessimo
utilizzato 2 byte (16 bit), avremmo avuto a disposizione ben 65536 colori diversi, e
così via. Supponiamo, ora, di voler aumentare sia il numero dei colori, sia l’ampiezza della griglia. È evidente che l’aumento della risoluzione, vale a dire della nitidezza
dei dettagli dell’immagine, che viene misurata in punti per pollice (DPI: Dots Per
Inch) e l’incremento del numero dei colori comportano un notevole aumento del
numero di bit occorrenti per rappresentare un’immagine.
Immaginiamo di utilizzare una griglia molto diffusa per i PC, quella che prevede una
risoluzione di 800 colonne per 600 righe, e di assegnare a ogni pixel 32 bit (che ci
permetteranno di specificare oltre 16 milioni di tonalità di colore). Con tali impostazioni, per rappresentare un’immagine a tutto schermo occorrono 800 × 600 × 32 =
15.360.000 bit.
La seguente tabella fornisce informazioni sull’occupazione in byte di diversi tipi di
oggetti: dando uno sguardo puoi renderti conto della notevole quantità di memoria
occorrente e, di conseguenza, di come deve essere rapido il trasferimento dalla memoria secondaria a quella centrale, in modo da avere una gestione efficiente.
Occupazione di memoria
Oggetto
Byte impegnati
Pagina di testo
circa 2 kB
Foto in bianco e nero (dimensione A4: 21 cm × 29,7 cm)
circa 8 MB
Foto a colori ad alta definizione (dimensione A4)
circa 40 MB
1h e 30’ di film non compresso in qualità televisiva
circa 30 GB
1h e 30’ di film ad alta definizione in qualità digitale
standard professionale (non compresso)
circa 1000 GB
I dati utilizzati in questa tabella sono relativi a parametri professionali e hanno valore indicativo per gli ordini di grandezza coinvolti.
Per avere dati più dettagliati si deve far riferimento a parametri più specifici. Chiariamo:
dire, ad esempio, che un’immagine ha 16 milioni di colori non significa che questi siano effettivamente tutti visibili. Può esserne visualizzato anche uno solo, però la profondità di colore disponibile consente di ottenere immagini fino a 16 milioni di colori.
Prima di concludere, diamo un accenno alle tecniche di rappresentazione dei colori. I metodi frequentemente utilizzati sono il sistema RGB e il sistema CMYK.
Il sistema con cui si creano i colori nel monitor si basa sulle stesse proprietà fondamentali della luce che si trovano in natura: i colori si possono ricavare dal rosso (R),
dal verde (G per green) e dal blu (B). Questo concetto è alla base del modello RGB. I
colori citati sono detti primari e la loro somma produce il bianco.
Il sistema CMYK – ciano (C), magenta (M), giallo (Y per yellow) e nero (K per black)
– si basa, invece, sui cosiddetti “colori pigmento” (un oggetto riceve tutto lo spettro
di luce, ne assorbe una parte e ne riflette una “fetta”: quest’ultima raggiunge l’occhio
che così vede il colore). La sovrapposizione dei colori ciano, magenta, giallo e nero
produce il colore nero.
Quando si opera sul monitor si usa il sistema RGB, mentre quando l’immagine deve
essere inviata a un centro di stampa litografica è opportuno operare una separazione
in quadricromia, convertendo dal sistema RGB al sistema CMYK.
Nel sistema RGB si assegna un valore d’intensità a ogni pixel compreso fra 0 (nero) e
255 (bianco) per ognuna delle componenti RGB di un’immagine a colori. Ad esempio, un colore rosso luminoso può avere un valore R di 246, un valore G di 20 e un
valore B di 50. Quando i valori di tutte le tre componenti sono uguali, si ottiene una
sfumatura di grigio. Quando il valore di tutte le componenti è 255, si ottiene il bianco puro, mentre quando il valore di tutte le componenti è 0, si ottiene il nero puro.
Le immagini RGB usano tre colori per riprodurre fino a 16,7 milioni di colori sullo
schermo; sono immagini a tre canali, per cui contengono 24 (8 × 3) bit per pixel.
Nelle immagini CMYK, il bianco puro si ottiene quando tutte le quattro componenti
hanno valore percentuale pari a 0 (0%).
Rosso (R)
RGB
Blu (B)
Bianco
Verde (G)
Ciano (C)
CMYK
Giallo (Y)
Nero
(K)
Magenta (M)
CODIFICA DELL’INFORMAZIONE MULTIMEDIALE START – INFORMAZIONI E CALCOLATORI
75
I sistemi di compressione
Le immagini digitali ad alta definizione richiedono una quantità enorme di byte per
poter essere memorizzate.
Per ridurre lo spazio occupato in memoria, l’unica soluzione è comprimere i dati
(cioè evitare di memorizzare i dati ripetuti, detti ridondanze) e decomprimerli prima del loro utilizzo. La compressione è indispensabile o quasi (in modo particolare
nelle immagini destinate al web) per ridurre la quantità di dati che devono essere
trasmessi via modem. Negli anni sono stati sviluppati vari algoritmi di compressione, che vengono utilizzati durante la fase di salvataggio delle immagini sulle
memorie di massa.
Il processo attraverso il quale si comprimono i file prende il nome di codifica,
mentre quello attraverso il quale si decomprimono assume il nome di decodifica.
L’insieme dei processi di codifica e decodifica definisce l’algoritmo di compressione.
In generale, un algoritmo di compressione dei dati è una tecnica per ridurre il più
possibile lo spazio occupato da un file.
Sono stati ideati molteplici protocolli di compressione e alcuni di essi, che con l’uso
si sono rivelati più efficaci, sono diventati degli standard. Sigle quali TIFF, GIF, JPEG
sono entrate a far parte del linguaggio comune, particolarmente di quello utilizzato
dagli utenti Internet o dai grafici. Queste sigle, e altre che ci accingiamo a studiare,
rappresentano specifici formati di file grafico e indicano anche, in alcuni casi, un
algoritmo di compressione.
Si definisce formato di file grafico il modo in cui i dati grafici vengono memorizzati
in un file dal programma.
Per memorizzare le immagini, dalle comuni fotografie in bianco e nero ai veri e propri filmati, si usano vari formati di file; per ridurre le dimensioni dei file, si usano
diversi algoritmi di compressione. Gli algoritmi di compressione vengono suddivisi
in tre grandi categorie, ognuna delle quali permette di utilizzare specifiche tecniche
di compressione (codec = compressione/decompressione):
• algoritmi a codifica entropica (compressione lossless);
• algoritmi a codifica sorgente o tecnica (compressione lossy);
• algoritmi a codifica ibrida (compressione ibrida).
La compressione lossless è un processo mediante il quale il file viene compresso
assicurando l’integrità del suo contenuto. Con la sua espansione, infatti, viene garantito il ritorno al file originale, identico in tutto e per tutto, senza alcuna perdita di
informazioni.
Questi algoritmi garantiscono una codifica fedele, completamente reversibile e applicabile a qualunque tipo di dato. Non essendoci perdita di dati originali in fase di
compressione, questa tecnica trova largo utilizzo nel trattamento di immagini nelle
quali non è accettabile alcuna perdita di informazioni e si vuole ottenere fedeltà
assoluta del file trasportato, ad esempio per le radiografie mediche.
Un algoritmo lossless è tanto migliore quanto più riesce a comprimere.
Molti programmi di compressione lossless utilizzano un metodo conosciuto come
algoritmo LZW (Lempel-Ziv Welch). La logica su cui si basa questo algoritmo è quella
di ricercare all’interno del file sottoposto a compressione dei sottoinsiemi di dati
ridondanti e di convertirli in blocchi di caratteri di lunghezza inferiore; il processo
viene eseguito in modo inverso in fase di decompressione.
La compressione lossy è un processo che non assicura la conservazione integrale del
contenuto del file, nel senso che i dati che devono essere compressi non possono poi
essere riespansi in modo da ottenere un file esattamente uguale a quello originale. Si
tratta quindi di una codifica non fedele e specifica per determinati tipi di dati.
76
START – INFORMAZIONI E CALCOLATORI
CODIFICA DELL’INFORMAZIONE MULTIMEDIALE
Un algoritmo di compressione lossy provoca una perdita di dati, scartando i particolari meno importanti. Se si comprime un file con un algoritmo lossy e poi lo si
de­comprime, si otterrà un file simile all’originale, ma non uguale.
Questa tecnica consente un elevato tasso di compressione (si va da un rapporto 1:5
a 1:90, a seconda di quanti dati si vogliono perdere) e viene solitamente applicata a
file (audio, video, immagini) i cui dati sono rivolti ai sensi umani (vista, udito). In questo
caso, infatti, i ricettori finali (occhi, orecchi) non sono in grado di apprezzare quelle
variazioni che, in termini di spazio, occupano diversi byte in memoria, e che quindi
possono essere eliminate senza determinare una compromissione dei dati nella loro
globalità. Una compressione che superi un rapporto di 1:10 comincia però a mostrare, anche all’occhio e all’orecchio umano, delle differenze.
stop
Diamo uno sguardo alle seguenti immagini:
È difficilissimo, se non impossibile, percepire le sottili differenze; apparentemente,
infatti, le immagini sono assolutamente identiche. L’immagine a sinistra ha una
profondità di colore a 8 bit, quella a destra a 6 bit, quindi la prima può contenere 28
colori, la seconda solo 26. Considerato che l’immagine a destra utilizza una quantità
di colori inferiore rispetto all’immagine sinistra, ha anche una dimensione decisamente inferiore rispetto quest’ultima.
Altre differenze che non è facile riscontrare sono la luminosità delle immagini a
colori e la tinta: la prima è distinguibile, la seconda non tanto, o meglio si ha una
maggiore sensibilità nel percepire i contorni o i contrasti. È stato scientificamente
dimostrato, infatti, che l’occhio umano è molto più sensibile alla luminosità che
non alla tinta. Queste osservazioni sono alla base della tecnica di compressione
lossy delle immagini, ma è bene ricordare, ancora, che una maggiore compressione
comporta necessariamente una perdita definitiva di dati.
Alla luce di queste informazioni, è facile intuire che per un file binario eseguibile
è senz’altro necessaria una compressione con algoritmi lossless, mentre per un file
audio può essere indicata una compressione lossy.
La compressione ibrida è una combinazione di tecniche lossless e lossy: la loro
interazione consente di ottenere il maggior grado di compressione e di efficienza.
Un algoritmo che rientra in questa categoria è lo standard di compressione delle
immagini JPEG (che tratteremo più avanti).
Attualmente esistono sul mercato svariati algoritmi che offrono un’ottima compressione dei dati per tutte le piattaforme: basti ricordare Winzip per Windows e Gzip per
Linux. Questi programmi, in genere, non utilizzano un solo metodo di compressione, ma ne combinano due o tre per ottenere un risultato migliore.
CODIFICA DELL’INFORMAZIONE MULTIMEDIALE START – INFORMAZIONI E CALCOLATORI
77
La compressione delle immagini
Abbiamo visto che la compressione lossy consiste nel rimuovere dalle immagini tutti quei dati che non
sono visibili all’occhio umano. Tenendo conto del tipo di informazione da comprimere, i programmi
di compressione utilizzano due tecniche diverse:
• la compressione intraframe (o compressione spaziale), usata soprattutto per immagini statiche;
• la compressione interframe (o compressione temporale), usata nei filmati.
Gli algoritmi basati sulla compressione spaziale (o intraframe) eliminano i dati ridondanti all’interno
del singolo fotogramma (frame).
Un semplice algoritmo di compressione spaziale potrebbe essere il seguente: se tre o più pixel adiacenti hanno lo stesso livello di grigio (la stessa gradazione nelle immagini a colori), invece di scrivere la
sequenza:
112 112 112 112 112 112 112 132 132 132 132 132
si potrebbe scrivere:
007 112 005 132
dove il primo numero indica la quantità di pixel (e quindi di byte) che hanno il valore 112, il terzo
numero indica la quantità di pixel (byte) che hanno il valore 132. Così facendo si risparmiano 8 byte
di memoria. Naturalmente, quando il file verrà aperto, dovrà essere filtrato da un apposito algoritmo
inverso di espansione.
Gli algoritmi basati sulla compressione temporale (o interframe) partono da un fotogramma di riferimento (key frame) ed eliminano le ridondanze dei fotogrammi successivi. Così facendo, memorizzano solo le differenze rispetto al fotogramma precedente (difference frame).
stop
In un fotogramma con una palla che rimbalza, verrà memorizzato per intero solo il primo fotogramma,
mentre per i successivi saranno memorizzati solo i dati relativi allo spostamento della palla.
Alcuni algoritmi di compressione
Esaminiamo ora alcuni algoritmi di compressione.
Esempio:
Per comprimere la seguente stringa numerica:
6666666666666666666639444444443555555222222288889999966666666664444445201111166666
66666
è possibile compilare il seguente “dizionario”:
78
A = 6666666666
B = 444444
C = 555555
D = 2222222
E = 8888
F = 99999
G = 11111
START – INFORMAZIONI E CALCOLATORI
CODIFICA DELL’INFORMAZIONE MULTIMEDIALE
Sostituendo, si ottiene la stringa:
AA39B443CDEFAB520GA
Algoritmo a codifica di stringa (lossless). è una tecnica applicata proficuamente per
i tipi di dati nei quali sono presenti sottostringhe comuni. La compressione si ottiene semplicemente compilando un dizionario di sottostringhe, ognuna delle quali
verrà sostituita da una opportuna sequenza univoca (ovviamente più corta) nel file
compresso.
Il file compresso dovrà contenere sia la stringa compressa sia il dizionario delle
abbreviazioni; la compressione più vantaggiosa si ha quando più stringhe uguali si
ripetono nel testo (come A e B). Pensando a una foto, o comunque a un’immagine,
è immediato comprendere quanto sia facile trovare delle sequenze di bit della stessa
tonalità di colore, mentre nei file audio le sequenze di 0 possono essere interpretate
come il silenzio audio.
Esempio:
La seguente stringa:
111111111111111556666660000000000888899999
può essere compressa nel seguente modo (il numero prima di # rappresenta l’elemento
ripetuto, il numero posto dopo il # indica quante volte compare nella stringa):
1 # 15 5 # 2 6 # 6 0 # 10 8 # 4 9 # 5.
Run-Length Encoding – RLE (lossless). È una tecnica molto elementare, la cui forza è
imperniata sulla presenza, nei dati da sottoporre a compressione, di ampie successioni di bit uguali. La compressione avviene sostituendo la sequenza di bit uguali
con un carattere speciale e un numero che ne suggerisca la lunghezza.
Algoritmo a codifica statistica (lossless). In questa categoria rientrano l’algoritmo di
Huffman e quello di Lempel-Ziv Welch (LZW), due fra gli algoritmi di compressione
più utilizzati. In particolare, l’algoritmo di Lempel-Ziv Welch (LZW) è una tecnica di
compressione di tipo lossless supportata da diversi formati grafici. È molto utile per
comprimere immagini che contengono ampie aree caratterizzate da un’unica tonalità di colore. Arriva anche a dimezzare le dimensioni del file (dipende, comunque,
dal contenuto).
Anche questo algoritmo si basa sulla logica di sostituzione delle sequenze più
lunghe con altre più corte: la differenza rispetto al metodo precedente consiste nel
fatto che la determinazione delle sequenze da sostituire viene eseguita basandosi su
analisi statistiche.
Algoritmo a codifica differenziale (lossy). Per comprendere questo algoritmo facciamo un esempio: supponiamo di voler comprimere una sequenza di valori espressi
in matrici (relativi a un file audio, video o multimediale) e di essere al corrente che i
valori adiacenti variano poco l’uno dall’altro. Per esempio, ipotizziamo che il valore
posto nella posizione i della stringa sia 3456 e il valore posto in i + 1 sia compreso
tra 3456 – 128 e 3456 + 128. Se tutti i numeri sono espressi utilizzando 24 bit (come
avviene comunemente nei file di immagini), è ammissibile esprimere la sequenza
con numeri di soli 8 bit, considerando soltanto il numero i + 1 come la somma del
valore del precedente i con la differenza tra i e i + 1. In questo modo si utilizzano
solo 8 bit al posto di 24 per ogni numero della sequenza, con un risparmio di 16 bit
(2/3 in meno). A prima vista sembrerebbe che questa codifica sia di tipo lossless, ma
non è così, poiché si ha una perdita di dati quando due valori adiacenti differiscono
più di quanto possa essere espresso con 8 bit (ossia 127 nei numeri con segno e 255
in quelli senza segno).
Questa tecnica non può essere applicata a tutti i file, nel senso che non tutti i tipi di
dati sono adatti a essere compressi con questo algoritmo: in particolare, i dati che
prevedono sbalzi troppo elevati subiscono un’esorbitante perdita di informazione.
Algoritmo a trasformazioni (lossy). Un tipo di trasformazione si può avere, per esempio, nelle immagini.
Supponiamo di avere la matrice 3 x 3 riportata qui a fianco, che rappresenta un livello di colore RGB in un’immagine: la compressione può essere ottenuta sottraendo a
tutte le celle successive alla prima, in alto nella tabella, il valore di questa. Si utilizza
una compressione statistica per variare il numero di bit utilizzati.
155
155
146
–6
152
–3
153
–2
153
–2
152
–3
154
–1
156
+1
157
+1
CODIFICA DELL’INFORMAZIONE MULTIMEDIALE START – INFORMAZIONI E CALCOLATORI
79
Grafica raster e grafica vettoriale
Esistono due tipi di grafica:
• grafica a punti o raster (bitmap graphics);
• grafica vettoriale (object-oriented graphics).
Nella grafica bitmap l’immagine è una griglia rettangolare (chiamata tecnicamente
raster) di pixel colorati: è un po’ come un mosaico in cui le singole tessere corrispon-
dono ai pixel. Nella memoria del computer vengono conservati i singoli pixel relativi
all’immagine bitmap. Considerato che anche il video è un dispositivo raster, questo
tipo di grafica ben si presta alla visualizzazione su video. Le immagni bitmap sono dipendenti dalla risoluzione: ciò significa che, quando si crea un file, occorre specificare
una risoluzione. Cambiare risoluzione significa modificare la qualità dell’immagine.
In alcuni casi la grafica bitmap non è molto vantaggiosa. Per esempio, nel caso di un
ingrandimento o zoom, la risoluzione diviene particolarmente bassa e di conseguenza
la qualità dell’immagine peggiora considerevolmente.
La grafica bitmap o raster viene impiegata particolarmente nei settori dedicati all’elaborazione delle immagini e permette di lavorare sui singoli pixel: così facendo, si possono ottenere effetti simili a quelli della pittura e della grafica tradizionale (pennello,
matita, carboncino, gessetto). I programmi di fotoritocco, infatti, funzionano proprio
in questo modo.
Cambiando le dimensioni di un’immagine bitmap, la qualità peggiora a mano a
mano che l’immagine viene ingrandita o ridotta. In questo secondo caso, il computer
è costretto a restituire il singolo pixel come una “media” di quelli originali, mentre nel
caso dell’ingrandimento è costretto a “inventare” dei pixel che prima non esistevano:
nel primo caso l’immagine si presenta impastata, mentre nel secondo sgranata. Ciò
significa che, purtroppo, si hanno limiti notevoli nella manipolazione di un’immagine
bitmap.
Nella grafica vettoriale, invece, un’immagine è vista come un raggruppamento di oggetti grafici (punti, linee, rettangoli, ovali e così via), ognuno dei quali viene tradotto
in formule matematiche che contengono tutte le istruzioni necessarie per poterlo tracciare. Per esempio, per i segmenti vengono memorizzate solo le coordinate del punto
iniziale e di quello finale, mentre per un cerchio si memorizzano solo le coordinate del
centro e la lunghezza del raggio. La colorazione avviene mediante l’attribuzione diretta
del colore alle linee e alle aree chiuse, per cui risulta precisa e netta.
Ogni singolo oggetto componente l’immagine è assolutamente indipendente e, come
tale, può essere spostato, modificato o eliminato senza influenzare in alcun modo
gli altri oggetti dell’immagine. Dal momento che ogni oggetto viene rappresentato in
memoria per mezzo di una funzione matematica, per riprodurre l’immagine su un
dispositivo raster (come un monitor) occorre trasformarla in pixel: tale operazione è
definita rasterizzazione.
Il procedimento opposto, cioè la trasformazione di immagini raster in immagini vettoriali, viene detto vettorializzazione.
È facile rasterizzare le immagini vettoriali, cioè trasformarle in bitmap, mentre è molto
complesso il procedimento inverso: pochissimi sono infatti i programmi in commercio che consentono di trasformare bitmap (ad esempio immagini digitalizzate allo
scanner) in vettoriali.
La grafica vettoriale (a oggetti) è, quindi, un altro modo di produrre effetti grafici con il
computer. I programmi di CAD (Computer Aided Design) sono software che utilizzano
la grafica vettoriale.
80
START – INFORMAZIONI E CALCOLATORI
CODIFICA DELL’INFORMAZIONE MULTIMEDIALE
La descrizione matematica di ogni oggetto che compone il disegno viene memorizzata in un database interno di oggetti grafici. Attraverso questa tecnica, tutti gli
oggetti possono essere manipolati (ingranditi, rimpiccioliti, colorati, ruotati e così via).
senza alcuna perdita di qualità. Inoltre, cambiando le dimensioni di un’immagine
vettoriale, la qualità viene conservata, perché vengono modificate sul piano solo le
linee e le curve: per questo motivo si dice che le immagini vettoriali sono scalabili e
indipendenti dalla risoluzione (resolution independent).
stop
I programmi di grafica vettoriale consentono di vedere l’immagine in due diverse
modalità:
• visualizzazione wireframe;
• visualizzazione shaded.
Il modello di visualizzazione wireframe (che letteralmente significa “modello in
fil di ferro”) consente di vedere esclusivamente le linee che compongono l’immagine ed è molto utilizzato per poter trattare più agevolmente l’immagine stessa.
L’interno dell’immagine rimane di fatto trasparente (sembrando costruito con il fil
di ferro, ecco il motivo del nome). Per vedere la rappresentazione realistica dell’oggetto finale, si ricorre a immagini bidimensionali chiamate texture, che vengono
applicate ai poligoni dell’oggetto tridimensionale, oppure alla visualizzazione shaded, in modo da attribuire un’ombreggiatura (shaded in italiano significa ombreggiato). L’operazione di applicazione di una texture a un poligono prende il nome
di texturing o texture mapping.
Wireframe
Shaded
Texture mapping
CODIFICA DELL’INFORMAZIONE MULTIMEDIALE START – INFORMAZIONI E CALCOLATORI
81
I formati grafici delle immagini bitmap
La memorizzazione di un’immagine bitmap comporta la scrittura di due tipi di informazioni:
• i valori dei pixel; in particolare, per determinare e ottenere un colore:
–la scala di grigio richiede un valore;
–il metodo RGB richiede tre valori;
–il metodo CMYK richiede quattro valori;
–il metodo Lab richiede tre valori;
• le metainformazioni.
Per le immagini a 8 bit i valori dei pixel vanno da 0 a 255, mentre per le immagini a
16 bit l’intervallo di valori va da 0 a 65535. In base al modo in cui sono organizzate
le metainformazioni si hanno diversi formati grafici bitmap. Li esaminiamo sommariamente nel seguito.
BMP
È il formato grafico di tipo bitmap di Microsoft Windows e supporta immagini fino
a 24 bit. Viene utilizzato da programmi come Paint; le immagini caratterizzate da
questo formato possono essere usate come sfondo per il desktop di Windows.
La particolarità di questo formato, che ne ha decretato il successo, è la velocità con
cui le immagini vengono lette o scritte su disco. Tale velocità, infatti, è notevolmente
superiore rispetto ad altri tipi di file, in particolar modo sulle macchine più lente.
Nelle immagini bitmap non compresse la rappresentazione dei dati all’interno della
memoria RAM è praticamente simile, se non addirittura identica, a quella dei dati
presenti su disco: in questo modo il processore non è obbligato ad eseguire gravosi
calcoli durante le operazioni di codifica e di decodifica. Eventuali limitazioni e ritardi sono dovuti solo all’hardware del drive.
La compressione è opzionale, ma generalmente è impostata secondo l’algoritmo di
tipo lossless RLE descritto in precedenza.
TIFF
Il TIFF (Tag Image File Format) è il più usato, flessibile e affidabile metodo per la
memorizzazione di immagini bitmap di qualità in bianco e nero, a scala di grigio, a
scala di colore (a colori RGB, CMYK, Lab e altri ancora).
È un formato supportato dalla quasi totalità delle applicazioni. Un file TIFF può
essere di ogni dimensione (in pixel) e di ogni profondità di bit. Può essere salvato
con o senza compressione: nel caso in cui venga compresso, viene utilizzata la compressione LZW, che è di tipo lossless.
Oltre ai dati dei pixel, il formato TIFF può contenere qualsiasi metainformazione (le
più comuni sono la risoluzione, la compressione, il modello di colore, il tracciato di
scontorno e così via) in specifiche locazioni di memoria denominate tag.
Il formato TIFF era stato inizialmente creato per divenire un formato raster standard:
aveva infatti tutte le caratteristiche per poter essere applicato in un ampio ventaglio di
applicazioni. Nonostante ciò, alcune applicazioni introducono appositi tag proprietari con i quali è possibile impedire l’apertura dei file da altre applicazioni.
Esistono due versioni di TIFF, una destinata a macchine Windows e una a macchine
Macintosh. Pur essendo molto simili tra loro, la differenza sostanziale sta nell’ordinamento dei byte: nei file per Windows i byte iniziano con le cifre meno significative, mentre in quelli per Macintosh con quelle più significative. È comunque
possibile utilizzarli su entrambi i sistemi.
Un file in formato TIFF si può convertire in quasi tutti i formati grafici.
82
START – INFORMAZIONI E CALCOLATORI
CODIFICA DELL’INFORMAZIONE MULTIMEDIALE
GIF
Il GIF (Graphics Interchange Format) è un formato standard di memorizzazione di
file grafici di tipo bitmap a scala di colore (quindi, in questo caso, RGB) con un
massimo di 256 colori (o grigi). Questo formato è stato realizzato da CompuServe,
uno dei primi Internet provider, per diffondere attraverso la Rete immagini grafiche
compresse, ottenendo così un’elevata rapidità.
È probabilmente il formato grafico più usato al mondo, poiché è dominante su
Internet e nelle librerie shareware.
Il formato GIF funziona bene sui grafici cosiddetti “al tratto”, loghi, fumetti, sia in
bianco e nero che a colori poiché utilizza una compressione lossless (precisamente,
l’algoritmo usato è quello LZW). Ciò significa che nessun pixel dell’immagine originale viene perduto. Esso, però, non è altrettanto valido per le fotografie e le immagini sfumate, per le quali è meglio usare il formato JPEG.
In particolare, il formato GIF offre le seguenti possibilità utili nella realizzazione di
pagine web.
• Uno qualsiasi dei colori dell’immagine può essere considerato trasparente, in
modo che attraverso le aree di tale colore sia visibile lo sfondo su cui l’immagine
viene visualizzata (GIF trasparenti);
• L’immagine è memorizzata con una struttura tale che consente la sua visualizzazione durante il caricamento in Rete. Il dettaglio aumenta a mano a mano che
l’immagine viene caricata (GIF interlacciate). La figura, invece di essere caricata e
visualizzata in un singolo passaggio, necessita di diversi passaggi per poter essere
visualizzata in modo ottimale. Prima, quindi, viene mostrata sfuocata, poi, piano
piano, l’immagine viene gradualmente riempita e resa sempre più nitida, fino a
essere completata. Questo è un punto di forza del formato GIF, perché l’utente
collegato a Internet può vedere l’immagine “comporsi” mentre viene scaricata e
avere un’idea del contenuto della stessa. Può, così, interrompere il caricamento
prima del termine, risparmiando tempo se, ad esempio, l’immagine non è quella
che cerca.
• È possibile inserire in un unico file diverse immagini, in modo da realizzare animazioni di cui si può specificare la temporizzazione (GIF animate).
Le prime due possibilità sono disponibili sin dalla prima versione del formato
(GIF87a), la terza, invece, è stata introdotta nella versione GIF89a.
PNG
Il formato PNG (Portable Network Graphics) nasce poiché il formato GIF, che era lo
standard per la trasmissione delle immagini in Rete, a seguito del brevetto dell’algoritmo di compressione che utilizza non può più essere usato gratuitamente da chi
scrive software. Questo formato, che si pronuncia “ping”, riesce a gestire immagini
da 1 a 48 bit e utilizza una compressione di tipo lossless. Possiede, inoltre, alcune
caratteristiche tipiche delle immagini GIF, come la trasparenza e l’interlacciamento.
L’utilizzo di questo formato è stato in principio limitato; ciò a causa del fatto che
solo pochi software erano in grado di scrivere o leggere tali immagini. Col tempo,
tutti i maggiori programmi di grafica e di navigazione hanno accettato il formato
PNG, che così ha trovato più largo utilizzo.
CODIFICA DELL’INFORMAZIONE MULTIMEDIALE START – INFORMAZIONI E CALCOLATORI
83
Il formato JPEG e la geometria frattale
Il formato JPEG
JPEG (Joint Photographic Experts Group) è un formato standard di compressione dei
file grafici di tipo bitmap. Il suo nome deriva dal comitato dell’ISO (International
Standard Organization), che ne ha definito le specifiche. Il formato JPEG (si pronuncia “geipeg”) è stato realizzato per memorizzare im­ma­gini a colori o a toni di grigio
di scene fotografiche na­tu­rali (in modo compresso) basandosi su elaborazioni ma­
tematiche dell’immagine digitalizzata. È un ottimo formato per la memorizzazione
di fo­tografie, quadri, disegni mol­to sfumati con un elevato nu­me­ro di colori (fino a
16.777.216) o a toni di grigio, ma non è l’ideale per fumetti, disegni al tratto, logo,
lettering dove, come abbiamo vis­to, risulta più valido il formato GIF.
Il formato JPEG tratta solo immagini statiche, ma esiste un altro standard correlato,
MPEG, per i filmati (immagini in movimento).
Il formato JPEG viene mediamente utilizzato con un rapporto di compressione compreso fra 1:5 e 15:1, ma può arrivare molto oltre.
Il metodo di compressione utilizzato da questo formato è di tipo lossy, il che significa che, per diminuire la dimensione dell’immagine,
alcuni pixel devono essere eliminati, per poi essere
ricostruiti (ma non esattamente uguali) in fase di
decompressione. Di conseguenza, l’immagine risultante non sarà più esattamente uguale a quella
originale. Ma c’è di più! Se si manipola un’immagine
JPEG e si risalva in JPEG, potrebbe verificarsi un’ulteriore perdita di pixel. Se si modifica un file JPEG
solo localmente e lo si salva utilizzando lo stesso
livello di qualità con cui era stato salvato la prima
volta, si avrà un degrado dell’immagine irrisorio o
addirittura nullo, poiché verrà modificata solo la
parte corretta. In tutti gli altri casi, però (ad esempio
il taglio di una porzione di immagine), l’algoritmo
di compressione viene riapplicato e l’immagine perde nuovi pixel.
Il formato JPEG è stato progettato in modo che i pixel eliminati siano quelli meno
visibili all’occhio umano che, infatti, è meno sensibile alle piccole variazioni di colore che alle piccole variazioni di luminosità. Se si trovano due pixel caratterizzati da
una minima variazione di luminosità vengono conservati, ma se si trovano due pixel
con una minima variazione di colore ne viene mantenuto solo uno.
Nonostante tutto, JPEG non usa un metodo fisso di compressione. Si può avere,
infatti, una compressione lossy cosiddetta “dosata”, nel senso che l’utente, in fase di
memorizzazione dell’immagine, può specificare il fattore di compressione desiderato,
con un unica limitazione: maggiore è il valore di tale fattore (quindi più piccolo è il
file che si ottiene), maggiore è il deterioramento dell’immagine. Questa variante, che
consente di scegliere il fattore di compressione, è nota come JPEG progressivo, che fornisce diverse rappresentazioni della stessa immagine, corrispondenti a diversi fattori
di compressione: a fattori sempre maggiori corrisponde una qualità via via più bassa.
Una forma più recente di JPEG, chiamata JPEG progressivo, conferisce alle immagini JPEG la stessa gradualità di visualizzazione delle immagini GIF interlacciate;
al pari di queste ultime, le immagini JPEG progressive impiegano spesso un tempo
maggiore per il trasferimento nella pagina web rispetto alle JPEG standard, ma offrono al lettore un’anteprima più rapida.
84
START – INFORMAZIONI E CALCOLATORI
CODIFICA DELL’INFORMAZIONE MULTIMEDIALE
La geometria frattale
Lo scienziato Benoit B. Mandelbrot all’inizio degli anni Cinquanta si chiese se le
incantevoli forme presenti in natura rispondessero soltanto alla legge del caso o, per
quanto articolate e complesse, non obbedissero a qualche legge universale.
Attraverso i suoi studi, e in particolare per mezzo di un diagramma che prese il suo
stesso nome, Mandelbrot dimostrò che specifiche geometrie si manifestavano e si
riproponevano sia esaminando la realtà in scala estremamente grande, sia osservandola in scala estremamente piccola.
Comprese che esistevano degli oggetti (che chiamò appunto frattali) che, indipendentemente dal punto di vista e dall’ingrandimento utilizzato, ripresentano sempre
le stesse forme, in quanto ogni parte è rappresentativa del tutto.
Proviamo a realizzare una comune immagine frattale, nota come fiocco di neve di
von Koch.
Il procedimento è molto semplice:
• si prende un segmento, lo si taglia in 3 parti uguali e si sostituisce
quella centrale con due segmenti uguali a quello eliminato;
• si ripete l’operazione con ciascuno dei quattro segmenti ottenuti
e si continua a ripeterla per un numero infinito di volte.
Dopo un numero infinito di iterazioni si ottiene una curva frattale
che, come tutte le curve di questo tipo, è dotata di avvincenti proprietà matematiche, spesso facili da intuire ma, altrettanto spesso,
difficili da dimostrare.
Se il nome “fiocco di neve” può apparire non particolarmente adatto alla curva riportata nella figura precedente, è sufficiente osservare
ciò che si ottiene applicando il medesimo procedimento ai lati di un
triangolo per cambiare idea.
Un altro classico esempio di curva frattale è rappresentato dalla costa marina: se riflettiamo, infatti, i contorni costieri presentano sempre un flessibile sistema di punte e insenature, a qualsiasi altezza e
grandezza li si osservi.
È questa un’altra proprietà dei frattali, che Mandelbrot chiamò autosomiglianza:
ingrandendo un qualsiasi tratto di curva si visualizza un insieme di particolari ricco e complesso che somigliano ciascuno al tratto stesso. Questo procedimento di
“zoom” può procedere all’infinito.
Da queste analisi derivano due curiose caratteristiche delle curve frattali:
• pur essendo continue, non ammettono una tangente unica in alcun punto;
• presi due punti della curva, anche vicinissimi tra loro, la distanza fra essi (misurata lungo la curva) è sempre infinita.
Grazie all’impiego degli attuali computer, e abbinando questi algoritmi a procedure
ricorsive, si possono generare delle armonie spaziali estremamente complesse. Le
figure frattali, pur potendo apparire a prima vista come immagini astratte, ricalcano
in qualche modo gli stessi processi che regolano il mondo che ci circonda e, quindi,
risultano ai nostri occhi modelli familiari.
Ricordiamo, infine, che i frattali sono tipicamente grafica vettoriale.
CODIFICA DELL’INFORMAZIONE MULTIMEDIALE START – INFORMAZIONI E CALCOLATORI
85
La grafica tridimensionale
e il rendering
La grafica vettoriale può essere bidimensionale o tridimensionale. In un’immagine
tridimensionale ogni forma è costituita da una struttura di poligoni. Per dare a tale
struttura l’aspetto di un solido si ricorre a varie tecniche che, attraverso l’aggiunta
o la sottrazione di colori, oppure mediante la “limatura” di bordi, consentono di
attribuire all’immagine effetti luce/ombra o di dare risalto a elementi dell’immagine
stessa.
Vediamo quali sono queste tecniche e quali effetti producono.
Anti-aliasing
L’anti-aliasing è un procedimento grafico mediante il quale è possibile eliminare o
attenuare la “seghettatura” che appare sugli schermi raster nei bordi dei poligoni,
nelle linee curve e in quelle oblique, così come gli errori di clipping (quando oggetti
posizionati dietro dei poligoni si vedono comunque) o problemi dovuti a oggetti
che si spostano in maniera anomala. L’anti-aliasing, quindi, aumenta in maniera
sensibile la qualità e il realismo della scena.
Osserviamo la seguente figura.
a)
b)
c)
d)
Nell’immagine a possiamo vedere delle righe caratterizzate da un bordo dentellato,
dovuto alla risoluzione. Il problema della “dentellatura” delle immagini è detto
aliasing.
L’immagine b, invece, ci mostra le stesse righe, ma “ammorbidite” e rese più regolari
incorporando dei colori intermedi tra il colore dell’immagine e quello dello sfondo
(le immagini c e d mostrano lo stesso effetto amplificato).
L’aggiunta di questi colori intermedi si chiama anti-aliasing. Alcuni programmi per
la creazione di immagini raster aggiungono automaticamente l’anti-aliasing alle immagini, in modo da migliorarne immediatamente la qualità.
Un problema dell’anti-aliasing è che se, successivamente, l’immagine viene spostata
su un altro sfondo, poiché i colori intermedi dipendono esclusivamente da quest’ultimo, si vedono degli aloni intorno all’immagine.
Alfa blending
L’alfa blending è una funzione utilizzata per attribuire un effetto di trasparenza a
superfici e sostanze. In termini più generici, il programmatore ha la possibilità di
assegnare ai singoli pixel un altro valore di colore diverso dai tradizionali rosso,
verde e blu (RGB). Con l’ausilio di questa quarta tonalità, il processore grafico sfuma (blending significa proprio l’azione dello “sfumare”) l’oggetto, che così appare
trasparente, pur conservando la sua caratteristica di tangibilità.
È molto utilizzata per creare effetti ghiaccio o vetro, ma anche per creare i classici
effetti fumo e nebbia.
86
START – INFORMAZIONI E CALCOLATORI
CODIFICA DELL’INFORMAZIONE MULTIMEDIALE
Gouraud shading
Il Gouraud shading è una funzione attraverso la quale è possibile intercalare, cioè
mediare i colori all’interno dei poligoni costituenti l’immagine. Più in generale, il
colore di ciascun poligono viene miscelato con la luce (che può essere anch’essa
colorata) che va a colpire il poligono stesso: il risultato è un effetto di profondità e
una smussatura degli spigoli vivi.
Morphing
Il morphing (potremmo tradurlo con metamorfosi, poiché è l’abbreviazione di
metamorphosing) è una tecnica che consiste essenzialmente nella trasformazione
di un oggetto in un altro. Gli oggetti possono essere di varia natura (fotogrammi,
immagini, elementi tridimensionali). Per ognuno di essi vi sono speciali programmi
che permettono di realizzare tale trasformazione. La sua prima applicazione in 3D
risale al videoclip di Michael Jackson dal titolo Black or White. Nelle ultime scene di
tale clip, infatti, si assiste a una metamorfosi che coinvolge i volti di alcuni giovani
che, scuotendo la testa, “cambiano faccia”. Per quanto riguarda il cinema, invece, il
primo esperimento di morphing 3D risale a Willow, un film di Ron Howard. Il morphing ha sostituito la tecnica della dissolvenza, dando la possibilità di creare metamorfosi molto più naturali. Se si osserva la sequenza di trasformazione fotogramma
per fotogramma, si può notare che ognuno di essi si differenzia sempre di più dalla
figura di partenza, sino ad assumere le caratteristiche del soggetto finale. Il segreto
per un buon risultato è che i soggetti delle due immagini abbiano una certa affinità
di dimensione, posizione e sfondo, in modo da ottenere un’animazione quanto più
realistica possibile.
Il rendering
I programmi per il disegno tecnico, detti anche programmi di CAD (Computer Aided
Design), sono utilizzati da ingegneri e architetti per la progettazione di abitazioni,
circuiti elettronici, automobili, aerei e così via. Permettono di disegnare gli oggetti
sin nei minimi particolari e di osservarli da diverse angolazioni, al fine di poter apportare tutte le modifiche necessarie. I lavori realizzati con i programmi CAD vengono visualizzati con l’ausilio di appositi programmi di rendering.
Questi particolari programmi consentono di riprodurre l’oggetto realizzato in modo
assolutamente realistico. Osservando questi disegni si ha come la sensazione di osservare gli oggetti dal vivo: i giochi di luce, le ombre, le prospettive riflettono appieno la realtà in cui l’oggetto si trova o sarà collocato. Il concetto di rendering, infatti,
è proprio questo: rappresentare in modo più o meno fedele un oggetto in fase di
progettazione, affinché l’osservatore sia in grado di percepire forma, proporzioni,
colori e superfici dell’oggetto progettato dal designer.
Ciò avviene grazie ad alcuni aspetti:
• la corretta prospettiva che i vari programmi riescono a riprodurre;
• le ombre ottenute con l’attento e ponderato posizionamento delle luci virtuali;
• gli effetti derivanti dall’uso di obiettivi virtuali, per ottenere immagini simili a
quelle di un teleobiettivo;
• la riproduzione dei materiali (texture), con gli effetti di brillantezza, rifrazione e
opacizzazione delle superfici.
CODIFICA DELL’INFORMAZIONE MULTIMEDIALE START – INFORMAZIONI E CALCOLATORI
87
L’audio digitale
L’audio
Fin dalle origini l’uomo ha cercato varie soluzioni per facilitare la propagazione
del suono utilizzando diversi dispositivi artificiali che aumentassero l’efficienza di
questa trasmissione. La maggiore concentrazione era riservata alla ricerca di un metodo che consentisse di far attraversare al suono spazi maggiori senza essere troppo
contaminato da disturbi (detti anche rumori).
Una volta risolto questo problema ci si è concentrati sul modo per memorizzare il
suono su supporti di memorizzazione che ne permettessero, oltre che il trasporto
nello spazio, anche quello nel tempo, ossia che ne permettessero una memorizzazione permanente. Furono usati molti artifizi tecnologici, fino all’invenzione del telefono (a opera dell’italiano Meucci), che permetteva di trasformare i segnali sonori
in segnali elettrici che contenevano tutte le informazioni (o quasi) del segnale sonoro originale, ma che potevano essere più facilmente (e più velocemente) trasportate nello spazio (tramite fili elettrici in un primo tempo e successivamente anche
tramite onde elettromagnetiche con l’invenzione della radio da parte di Guglielmo
Marconi).
Nel corso degli anni le innovazioni riguardanti il trattamento del suono sono state
numerose e con l’avvento del computer si è giunti anche a un suo “trattamento informatico”: la cosiddetta digitalizzazione del suono.
La musica e i video sono sempre più diffusi: pensiamo ai lettori DVD, che hanno
ormai soppiantato i videoregistratori. E la musica? La si ascolta dai CD, dalle musicassette, dalla radio, dalla televisione o scaricata da Internet in formato MP3 (parleremo meglio di questo formato più avanti). La musica e il computer sono uniti da
un connubio oramai inscindibile: basti pensare che il personal computer ha assunto
il ruolo di un vero e proprio strumento musicale, grazie a particolari programmi
detti sequencer, che utilizzano diverse tecnologie per registrare, programmare e
riprodurre musica, lasciando all’operatore il massimo potere decisionale e creativo.
Qui e nel seguito analizzeremo sommariamente le principali
tecnologie informatiche al servizio della musica e dei video.
L’audio digitale
Per quanto riguarda i suoni, la trasformazione del dato analogico in dato digitale prende il nome di campionamento.
Il campionamento si basa su un processo di segmentazione
(quanto più perfetto possibile) dell’onda sonora di partenza.
È possibile rappresentare in molti modi un’onda sonora, ma la
rappresentazione più comoda è attraverso una funzione, simile
a quella mostrata nella figura qui accanto.
Nel campo del suono, la qualità che si riesce a ottenere attraverso
la digitalizzazione è molto elevata; basti pensare a quella dei CD
o DVD musicali, che non ha nulla a che vedere con quella degli
obsoleti dischi di vinile (nei quali l’informazione sonora era registrata in formato analogico).
Inoltre, la duplicazione di un brano codificato in formato digitale avviene in modo assolutamente fedele, ossia non esiste
il pericolo di una perdita di qualità: la copia sarà perfettamente
uguale all’originale, dato che vengono copiati dati numerici.
88
START – INFORMAZIONI E CALCOLATORI
CODIFICA DELL’INFORMAZIONE MULTIMEDIALE
La stessa cosa non può essere detta per il suono analogico, dove la copia introduce
inevitabilmente disturbi e distorsioni, che comportano un peggioramento della qualità sonora.
La scheda audio e il campionamento del suono
Nell’era multimediale la scheda audio assume una valenza sempre crescente all’interno dei computer.
La scheda audio è il dispositivo del computer preposto alla gestione del suono.
Essa contiene dei convertitori in grado di trasformare i segnali da analogici in digitali, affinché possano essere utilizzati dai vari programmi e, viceversa, da digitali in
analogici, affinché possano essere ascoltati.
Le schede più sofisticate presentano ingressi e uscite digitali in modo da evitare la
conversione e migliorare la qualità del suono. Le schede dispongono, inoltre, di:
• un sintetizzatore, capace di generare suoni;
• un processore di segnale, capace di elaborare il suono creando effetti;
• un’interfaccia MIDI, capace di scambiare dati con strumenti musicali esterni.
La qualità dell’audio riprodotto dipende, ovviamente, dalla qualità della scheda,
che a sua volta è legata alla qualità dei materiali e della tecnologia utilizzata.
Come accade per le schede video, la scheda audio ha un limite di risoluzione, determinato da due importantissimi fattori:
• la risoluzione, misurata in bit;
• la frequenza di campionamento.
La risoluzione (misurata in bit) corrisponde alla precisione con cui si misura l’intensità del segnale. Analogamente a quanto avviene per il video, la risoluzione è tanto
maggiore quanto più alto è il numero di bit che la definiscono: una registrazione
a 16 bit sarà caratterizzata da una qualità del suono nettamente migliore di quella
effettuata a 8 bit, ma nettamente inferiore a quella realizzata a 24 bit.
La frequenza di campionamento (misurata in kHz) indica il numero di volte che il
segnale di entrata viene letto (cioè campionato) dalla scheda audio in un secondo.
Anche in questo caso, maggiore è il valore di questo parametro, maggiore è la qualità
ottenuta.
In generale, lo standard CD prevede una risoluzione a 16 bit e una frequenza di
campionamento di 44,1 kHz (cioè 44.100 campioni al secondo). Il DVD include
risoluzioni sino a 24 bit e 96 kHz (96.000 campioni al secondo).
CODIFICA DELL’INFORMAZIONE MULTIMEDIALE START – INFORMAZIONI E CALCOLATORI
89
I principali formati audio
La distinzione fondamentale che può essere fatta sui formati dei file audio riguarda
due categorie:
• i file che descrivono i contenuti musicali (file .mid, comunemente chiamati file
MIDI o Midi file);
• i file che contengono effettivamente della musica (file WAVE).
I file MIDI non contengono né suoni né musica (per questo motivo sono file di
piccole dimensioni), bensì una specifica descrizione che informa il programma su
quali note suonare, in quale istante e con quale strumento musicale.
I file WAVE contengono la rappresentazione digitale di un evento sonoro. La conversione in digitale è svolta dalla scheda audio con l’utilizzo di chip ADC (Analog
Digital Conversion) in entrata di chip DAC (Digital Analog Conversion) in uscita,
ossia in fase di riproduzione del suono.
Lo standard MIDI
Il MIDI (Musical Instruments Digital Interface) è uno standard di comunicazione tra
strumenti musicali elettronici, che permette a uno strumento remoto (una tastiera,
un computer e così via) di comunicare con strumenti elettronici distanti (un generatore di suoni esterno, un generatore interno alla scheda audio e così via) e di
controllarli.
Se si collegano due tastiere MIDI con un cavo, le note suonate da una tastiera (detta master) vengono riprodotte dall’altra (detta slave). Il MIDI è fondamentale se
si vuole far musica con il computer: connettere strumenti MIDI a un elaboratore
dotato di software apposito significa avere la possibilità di comporre, arrangiare,
modificare e persino stampare la propria musica.
Come abbiamo visto, il MIDI descrive il contenuto musicale di un pezzo: si occupa, cioè, di codificare tutte le informazioni relative all’esecuzione di un passaggio
musicale. Facciamo un esempio: supponiamo di avere una tastiera musicale e di
premere il tasto DO della seconda ottava (ossia il secondo DO a partire da sinistra).
Se la tastiera dispone di un’interfaccia MIDI, essa tradurrà questa azione in un comando del tipo Suona la nota C2 (nella notazione anglosassone la lettera C sta per
il nostro DO, mentre il numero 2 rappresenta la seconda ottava) con una velocity
di 100 (la velocity indica l’intensità di pressione e si misura con valori oscillanti
nell’intervallo 0 ... 127).
Lo standard MP3
Un altro standard audio molto diffuso (particolarmente in Internet) è MP3 (MPEG
Audio Layer 3). Si tratta di uno standard di compressione ideato dal Moving Picture
Experts Group (l’acronimo dà il nome all’MPEG), un gruppo di persone nell’ambito
dell’ISO (International Standards Organization) che si occupa dello studio di metodi
atti a comprimere i dati audio e video sino a portarli a dimensioni ritenute accettabili per un comodo trasporto sui media digitali, garantendo nel contempo una modica
perdita in termini di qualità.
MP3 e compressione
Questo standard riesce a comprimere i file sino a 12 volte (o meno, dipende dalla
qualità che si desidera ottenere) basandosi sulle teorie della psicoacustica, cioè di
come l’orecchio e il cervello umano riescono a percepire i suoni (in particolare la
soglia di udibilità). L’orecchio umano percepisce le frequenze da 20 Hz a 20 kHz
ed è più sensibile tra i 2 kHz e 4 kHz, inoltre necessita di un certo tempo per poter
sentire suoni (frequenze) “deboli” adiacenti a suoni “forti”.
90
START – INFORMAZIONI E CALCOLATORI
CODIFICA DELL’INFORMAZIONE MULTIMEDIALE
Sfruttando questa “limitazione” dell’orecchio umano, questo algoritmo riesce a
produrre file con alti livelli di compattazione (a compressione avvenuta, un minuto
di musica occupa solo 1 MB contro i 10 MB normali). Per esempio, viene sfruttato
l’effetto di mascheramento: quando è presente un suono a volume molto elevato, i
suoni più deboli riprodotti nello stesso momento non vengono percepiti dall’orecchio umano e, pertanto, possono essere cancellati senza causare alcun cambiamento
in termini di qualità. Può essere sfruttata un’altra debolezza dell’orecchio umano:
il nostro organo sensoriale, infatti, non è in grado di riconoscere la direzione di
provenienza di suoni molto gravi; per questo motivo, tutte le informazioni relative
alla direzione del suono (stereofonia) poste al di sotto di una specifica frequenza
possono essere eliminate.
MP3 e qualità
Il fattore che incide notevolmente sulla qualità dei file MP3 è il bitrate, ossia il flusso
di dati in bit per secondo: maggiore è il bitrate, maggiore sarà la qualità.
Qualità
Frequenza
Bitrate
Compressione
= telefono
2,5 kHz mono
6 kb/s
96:1
> onde corte
4,5 kHz mono
16 kb/s
48:1
> radio AM
7,5 kHz mono
32 kb/s
24:1
= FM
11 kHz stereo
56-64 kb/s
24:1
< CD
15 kHz stereo
96-112 kb/s
14:1
simile CD
15 kHz stereo
128 kb/s
1:1
Per produrre un file MP3 con un computer (ovviamente dotato di una buona scheda
audio) sono necessari due tipi di software: grabber ed encoder.
I programmi di tipo grabber sono in grado di generare file wave da un CD, mentre i
software di tipo encoder servono per generare file in formato MP3 partendo da file
wave.
Per ascoltare un brano codificato in formato MP3 occorre un player (riproduttore).
Ne esistono moltissimi per ogni sistema operativo.
Gli standard MPC e MP4
Lo standard .mpc (MusePack) è un formato che offre altissimi risultati, soprattutto a
bitrate alti (oltre 192 kbps e oltre). I risultati sono assolutamente migliori dell’mp3:
è sufficiente ascoltare una traccia codificata in mp3 a 192 kbps e una in mpc allo
stesso bitrate per avvertire immediatamente la differenza. Questo è stato considerato
il miglior formato audio lossy, fino all’uscita dell’mp4. È supportato da WinAmp
tramite plugin, e in modo nativo da player più evoluti. Un album di 600 MB in formato WAV occupa circa 100 MB in mpc con bitrate intorno ai 192–256 kbps.
Lo standard .mp4, .aac (Nero MP4 AAC) è uno tra i più recenti ed è considerato
uno tra i migliori formati lossy, avendo superato anche la pur elevatissima qualità
dell’mpc. La qualità è estremamente elevata, seppure i tempi di conversione siano
un po’ più lunghi rispetto agli altri formati.
CODIFICA DELL’INFORMAZIONE MULTIMEDIALE START – INFORMAZIONI E CALCOLATORI
91
Il video digitale
Affrontiamo ora il problema della digitalizzazione dei filmati, ovvero di immagini in movimento con eventuale accompagnamento sonoro.
Proviamo a pensare a come è fatta una vecchia pellicola cinematografica: una successione
di fotogrammi (ognuno dei quali corrisponde a una precisa immagine statica), accompagnata da una banda sonora (in sostanza immagini e suoni). Sappiamo già come digitalizzare tanto le immagini che corrispondono ai singoli fotogrammi, quanto il sonoro che le
accoppia.
Appare immediatamente evidente che il numero di bit necessari per questa operazione
aumenta in maniera eccezionale. Il numero di bit necessari alla codifica di un filmato sarà
infatti tanto maggiore:
• quanto più lungo è il filmato;
• quanto maggiore è la sua risoluzione grafica, cioè quanto più fitta è la griglia utilizzata
per convertire in digitale i fotogrammi (frame) che compongono il filmato;
• quanto più ricca è la palette di colori impiegata;
• quanto maggiore è il numero di fotogrammi per secondo;
• quanto migliore è la qualità dell’audio (ossia la frequenza di campionamento).
Vediamo ora che cosa accadrebbe risparmiando sui bit:
• una bassa risoluzione grafica produrrebbe un filmato quadrettato, poco chiaro e non
differenziato;
• una palette troppo limitata renderebbe approssimativi e poco realistici i colori visualizzati;
• un numero troppo basso di frame per secondo darebbe vita a un filmato “a scatti”, impreciso e poco scorrevole;
• una frequenza di campionamento audio troppo bassa pregiudicherebbe, ovviamente,
la qualità del suono, così importante affinché un video possa stimolare quelle sensazioni di cui è il principale artefice.
Come è ormai ben noto, i fattori da considerare sono davvero molteplici: nonostante la
disponibilità di bit degli attuali computer sia aumentata tantissimo e nonostante il fatto
che nel campo delle immagini in movimento le tecniche di compressione abbiano fatto
passi da gigante, il full motion video digitale, cioè la capacità di rappresentare a pieno
schermo le immagini in movimento, con una risoluzione e con una scorrevolezza analoga
o addirittura migliore rispetto a quelle televisive, è un obiettivo raggiunto solo di recente;
e non ancora in tutti i casi.
Il video digitale professionale è stato utilizzato per la prima volta nel 1983 dal formato
D-1 di Sony. Per problemi dovuti al suo elevato costo, il formato D-1 venne utilizzato
maggiormente da grandi network televisivi. Nel corso degli anni fu sostituito da alcuni
sistemi più economici che utilizzavano dati compressi; tra i tanti ricordiamo il famoso
Digital Betacam sempre di Sony, che è ancora ampiamente utilizzato come formato di
registrazione dai grandi produttori televisivi.
Il video digitale di tipo amatoriale, invece, è stato utilizzato per la prima volta in forma di
QuickTime, nota architettura di Apple Computer per formati di dati time-based e di streaming, che si diffuse intorno al 1990.
Con il termine streaming si fa riferimento a un flusso di dati audio/video che vengono
trasmessi da una sorgente a una o più destinazioni attraverso una rete telematica. I
dati trasmessi sono poi riprodotti a mano a mano che giungono a destinazione.
In principio gli strumenti amatoriali in grado di creare contenuti video digitali erano grezzi
e richiedevano la digitalizzazione di una sorgente video analogica in un formato che potesse poi essere elaborato dai computer.
92
START – INFORMAZIONI E CALCOLATORI
CODIFICA DELL’INFORMAZIONE MULTIMEDIALE
Il video digitale amatoriale perfezionò velocemente la sua bassa qualità iniziale, in un primo
momento con l’introduzione di standard di riproduzione come MPEG-1 per l’archiviazione
e il recupero di filmati e audio, utilizzato anche nei video CD con una qualità di immagine simile a quella dei tradizionali nastri e MPEG-2, lo standard della TV digitale e dei DVD.
Successivamente, il miglioramento venne con lo standard MPEG-4 versione 1, lo standard per
le applicazioni multimediali.
Oltre ai codec appena menzionati, ne esistono degli altri tra cui ricordiamo uno tra gli ultimi
nati: lo standard MPEG-4 Part 10.
L’MPEG-4 Part 10 è conosciuto anche come MPEG-4 AVC (AVC è l’acronimo di Advanced Video
Coding) o semplicemente AVC. Questo standard è stato designato dall’ITU-T (International
Telecommunication Union – Telecommunication Standardization Bureau, il settore dell’Unione
Internazionale delle Telecomunicazioni che regola le telecomunicazioni telefoniche) come
H.264. Si tratta di un codec video sviluppato per video ad alta qualità anche a frequenze di trasmissione dei dati inferiori rispetto alle soluzioni attuali. È molto utilizzato per qualsiasi tipo
di periferica: dai televisori ai telefoni cellulari 3G.
I servizi di broadcast che si basano sullo standard H.264 occupano una banda decisamente inferiore rispetto allo schema di codifica utilizzato dall’MPEG-2, a una frequenza di trasmissione
dei bit notevolmente più bassa.
Con l’utilizzo di questo standard, gli operatori di broadcasting possono trasmettere in modo
assolutamente economico un maggior numero di programmi ad alta definizione. L’efficienza
della compressione è stata migliorata di oltre il 50% rispetto al precedente MPEG-2. I dispositivi
che maggiormente utilizzano questo sistema di codifica sono l’iPod video e la console Sony PSP.
Lo standard H.264 è oramai impiegato nei dischi ottici di ultima generazione (gli HD DVD). A
titolo di curiosità ricordiamo che nell’ottobre 2005 Apple Inc. distribuì nel suo famoso negozio
online iTunes Store i primi video codificati in H.264. Apple, che è stata sempre una tra le più
grandi sostenitrici di questo formato, fu una delle prime a rendere disponibile in QuickTime
uno specifico software per la codifica e decodifica di video codificati con AVC. Sono stati annunciati tali video anche per l’utilizzo su iPhone.
Possiamo ritenerci soddisfatti: disponendo solo dei simboli 0 e 1 (propri della codifica digitale)
abbiamo affrontato tipi di informazioni, tra cui anche suoni, immagini e video, assai diverse dal
numero o dal testo scritto.
CODIFICA DELL’INFORMAZIONE MULTIMEDIALE START – INFORMAZIONI E CALCOLATORI
93
LAVORARE CON TESTA
PROVE OGGETTIVE PER LA VERIFICA DELLE CONOSCENZE
1
Quali sono le differenze tra sistema RGB e il sistema
CMYK?
14 In che cosa consiste il processo di rasterizzazione?
2
Stabilisci se le seguenti affermazioni sono vere o false:
le principali caratteristiche della grafica di tipo
15 Esponi
bitmap.
a
b
Pixel corrisponde alla contra­­zione
dei due termini picture elements--------------------I primi elaboratori manipolavano
una griglia di 80 colonne per 60 righe-----------
v
f
v
f
le principali caratteristiche della grafica di tipo
16 Esponi
vettoriale.
17 Che cos’è una texture?
3
Che cosa si intende con profondità di colore?
4
Che cosa significa comprimere i dati?
5
Che cosa si intende per palette?
6
Che cosa si intende con la sigla codec?
20 Che cosa sono le immagini GIF trasparenti?
7
La compressione lossless:
21 In che cosa consiste il JPEG progressivo?
8
è la differenza tra visualizzazione wire-frame e
19 Qual
shaded?
a
garantisce una codifica fedele
b
può essere applicata a qualunque tipo di dato
c
dalla decompressione non si ottiene un file
identico in tutto
d
in fase di espansione viene garantito il ritorno
al file originale
ai frattali, che cosa si intende con auto22 Relativamente
somiglianza?
23 Che cosa si intende con Aliasing?
24 In che cosa consiste la tecnica Anti-Aliasing?
La compressione lossy:
9
che cosa consiste il processo di texturing anche
18 Indetto
texture mapping?
a
non assicura la conservazione integrale
del contenuto del file
25 In che cosa consiste la tecnica Alpha Blending?
b
è una codifica fedele
c
provoca una perdita di dati
se le seguenti affermazioni sono vere o false:
26 Stabilisci
a
d
dalla decompressione si ottiene un file uguale
alll’originale
Descrivi brevemente l’algoritmo RLE.
10 Descrivi brevemente l’algoritmo LZW.
11
Un’interfaccia MIDI è capace
di scambiare dati con strumenti
musicali esterni-----------------------------------------------------b Le schede audio possono utilizzare
un solo bus-------------------------------------------------------------c I file MIDI contengono musica e testo
----------d
I file WAV contengono musica e testo------------
e
I file MIDI possono anche non essere
riconosciuti da tutti gli strumenti---------------------
Che cosa si intende con il termine raster?
f
immagni bitmap sono resolution dependent. Che
12 Le
cosa significa?
13 In che cosa consiste il processo di pixelizzazione?
94
START – INFORMAZIONI E CALCOLATORI
La sigla Lyrics indica il testo
dei Midifile----------------------------------------------------------------
g
h
L’orecchio umano percepisce
le frequenze da 20Hz a 20KH--------------------------L’orecchio umano è più sensibile
tra i 2KHz e 4KHz--------------------------------------------------
CODIFICA DELL’INFORMAZIONE MULTIMEDIALE
v
f
v
f
v
f
v
f
v
f
v
f
v
f
v
f
training
1 Inno irlandese. Fai una ricerca su Internet per trovare
l’inno della nazionale Irlandese “Ireland’s call” in formato mp3. Ascoltalo utilizzando un lettore multimediale qualsiasi (per esempio Windows Media Player,
oppure VLC o qualsiasi altro lettore gratuito disponibile su Internet).
2 Registrazione di suoni 1. Registra una poesia con la
tua voce. Per far questo devi:
• procurarti un programma per registrare suoni
(quello utilizzato nella tua scuola, oppure cercane uno gratuito su Internet, oppure usa Registratore di suoni di Windows);
• assicurarti che il computer abbia un microfono
incorporato o procurarti e installare il microfono
per il tuo computer.
3 Registrazione di suoni 2. Cerca su Internet un file
musicale, aprilo con Registratore di suoni di Windows
e sovrapponi alla traccia audio una tua canzone.
4 Conversione di formato audio. Supponi che il tuo impianto stereo non legga il formato mp3, ma solo quello standard CD audio. Converti allora un file mp3 in CD
audio affinché possa essere letto dal tuo stereo. Per
far questo devi:
• procurarti un programma per convertire i formati
audio (quello utilizzato nella tua scuola, oppure
cercane uno gratuito su Internet come CDex, per
esempio);
• procurarti un file audio in formato mp3 (cerca una
canzone liberamente disponibile su Internet);
• utilizzare il programma di conversione che ti sei
procurato per convertire il file audio da mp3 a
CD audio;
• procurarti un CD vuoto e un qualsiasi program-
ma per copiare (masterizzare) il file così ottenuto
su un CD audio in modo da poterlo ascoltare sul
tuo impianto stereo.
5 Gif animate. Crea una gif animata che visualizzi un
pallino che cambia di colore. Per far questo devi:
• procurarti un qualsiasi programma a tua scelta
per creare una gif animata;
• utilizzare un qualsiasi programma a tua scelta
(per esempio Windows Paint o un programma
utilizzato dalla tua scuola) per creare le immagini
del pallino con i diversi colori;
• utilizzare il programma per le gif animate per
completare il lavoro.
PROVE APERTE PER LA VERIFICA DELLE ABILITÀ
6 Conversione di formato grafico 1. Converti un’immagine da formato GIF a formato TIFF. Per far questo
devi:
• procurarti un programma per convertire i formati
grafico(quello utilizzato nella tua scuola, oppure
cercane uno gratuito su Internet, o utilizza Windows Paint);
• procurarti un’immagine in formato GIF (eventualmente cercala su Internet);
• utilizzare il programma di conversione che ti sei
procurato per convertire il formato del file da GIF
a TIFF.
7 Conversione di formato grafico 2. Converti un’immagine da formato BMP a formato JPEG e verifica che
differenza c’è nella dimensione dei file tra i due formati. Per far questo devi:
• procurarti un programma per convertire i formati
grafico(quello utilizzato nella tua scuola, oppure
cercane uno gratuito su Internet, o utilizza Windows Paint);
• procurarti un’immagine in formato BMP (eventualmente cercala su Internet);
• utilizzare il programma di conversione che ti sei
procurato per convertire il file da BMP a JPEG;
• utilizzare Esplora risorse di Windows o un qualsiasi altro programma di gestione dei file per
confrontare le dimensioni delle due immagini.
8 Acquisizione immagini. Acquisisci qualche immagine
presente sulla tua fotocamera digitale o sul tuo telefonino. Per far questo devi:
• procurarti un programma per acquisire imma-
gini (quello utilizzato nella tua scuola, oppure
cercane uno gratuito su Internet adatto alla tua
fotocamera o telefonino);
• procurarti un cavo di collegamento tra telefonino
e computer (via USB) oppure accertarti se puoi
utilizzare porta a infrarossi o porta bluetooth;
• aprire l’immagine acquisita con un qualsiasi
lettore di immagini disponibile in Windows (o con
Windows Paint per poterla anche modificare).
9 Acquisizione video. Acquisisci un filmato da una videocamera digitale, oppure dal tuo telefonino. Per far
questo devi:
• procurarti un programma per acquisire filma-
ti (quello utilizzato nella tua scuola, oppure
cercane uno gratuito su Internet, oppure utilizza
Windows Movie Maker, già installato e disponibile in ambiente Windows);
• procurarti un cavo di collegamento tra telefonino
e computer (via USB) oppure accertarti se puoi
utilizzare una porta a infrarossi o bluetooth.
CODIFICA DELL’INFORMAZIONE MULTIMEDIALE START – INFORMAZIONI E CALCOLATORI
95
Dagli albori al 1822
Sin dall’antichità l’uomo ha sentito l’esigenza di eseguire calcoli precisi e privi di errori. I primi strumenti a disposizione furono, naturalmente, le dita, ma
quando queste non bastarono più, l’uomo fu costretto
a utilizzare ogni sorta di espediente: cominciò a tracciare delle aste sui muri della sua abitazione, a formare
cumuli di sassi, a usare altri sistemi rudimentali.
La necessità lo spinse, nel tempo, a costruire macchine
sempre più sofisticate che alleviassero la fatica del calcolo numerico.
La prima vera macchina da calcolo fu costruita dai
Greci e dai Romani: l’abaco, dalla parola greca abax,
che significa “tavola”. Era appunto una tavoletta,
divisa in due parti e composta da varie scanalature,
all’interno delle quali erano inseriti dei sassolini (il principio di funzionamento era
simile a quello del pallottoliere).
Nel 1623 Wilhelm Schickard costruì la prima macchina per il calcolo automatico, che
andò perduta nella Guerra dei 30 anni e della quale si scoprì l’esistenza solo nel 1957.
La macchina di Schickard era capace di compiere le quattro operazioni.
Il primo vero successo spettò al filosofo e matematico francese Blaise Pascal che,
appena ventenne, nel 1642 progettò una macchina per addizionare e sottrarre, che
teneva conto automaticamente dei riporti: la Pascalina, la più antica macchina di
calcolo giunta a noi (meno completa, però, di quella di Schickard, poiché effettuava
solo due operazioni). Essa diede inizio alla lunga serie di macchine calcolatrici che
avrebbe poi aperto il passo agli attuali computer.
La Pascalina era composta da una serie di ruote dentate indicanti le
unità, le decine, le centinaia e così via, e ognuna era divisa in dieci settori (dallo 0 al 9), corrispondenti alle cifre del sistema decimale. Il suo
funzionamento era semplice: per eseguire la somma 7+4 si impostava la
ruota delle unità sul 7 e la si faceva avanzare di 4 posizioni. Si otteneva
così un 1 sulla ruota delle unità e un altro 1 su quella delle decine, ruotata automaticamente da alcuni ingranaggi, che formavano il numero 11,
risultato dell’operazione.
La macchina di Pascal operava, dunque, in maniera rudimentale; tuttavia essa applicava un principio fondamentale nel calcolo meccanico: il “riporto automatico”, in
base al quale la rotazione completa di una ruota provoca automaticamente lo scatto
in avanti di un’unità della ruota successiva.
Nella seconda metà del secolo, nel 1673, anche il filosofo e scienziato
tedesco Gottfried Wilhelm von Leibniz progettò e costruì una macchina
calcolatrice, più avanzata rispetto a quella ideata da Pascal, dal momento che era in grado di eseguire automaticamente anche le operazioni di
moltiplicazione e divisione, mediante l’impiego di un pignone dentato.
Nel 1679 Leibniz progettò anche una macchina da calcolo binario,
introducendo quello che sarebbe divenuto il codice matematico dei
computer moderni.
Un contributo indiretto, ma decisivo, allo sviluppo di macchine automatiche per il calcolo, giunse nel 1725 a opera di Bouchon con l’invenzione della banda perforata per la programmazione automatica continua dei telai tessili. Tale invenzione venne perfezionata con l’adozione
di piccole schede a cartoncino dal meccanico Falcon nel 1728.
96
START – INFORMAZIONI E CALCOLATORI
STORIA DELL’INFORMATICA
Al francese Joseph M. Jacquard spetta il merito di aver reso
industriale questo processo, applicandolo ai telai meccanici;
si rivoluzionò, così, l’industria tessile. L’idea innovatrice di
Jacquard fu quella di far guidare automaticamente i movimenti del telaio da una serie di fori praticati su schede di
cartone. La trama e l’ordito della stoffa erano codificati da
queste schede di controllo, che venivano “lette” da una serie
di uncini collegati ai vari fili da intrecciare.
Nacque così, per compiti completamente diversi da quelli
successivamente svolti in informatica, la scheda perforata, utilizzata per trasmettere a una macchina le informazioni necessarie per il suo funzionamento.
La scheda perforata è stata usata fino a pochi decenni fa
come strumento di input. Era costituita da un cartoncino
rettangolare di dimensioni standard e suddivisa in ottanta
colonne e dodici righe: in ciascuna colonna poteva essere
memorizzato un carattere mediante la perforazione di fori
rettangolari in opportune posizioni.
Le apparecchiature che servivano per la perforazione delle schede erano di due tipi:
perforatori, che realizzavano la perforazione in modo automatico, e perforatrici di
tipo manuale, costituite da una tastiera analoga a quella delle comuni macchine per
scrivere.
Occorre attendere, però, gli studi di Charles Babbage e di Ada Lovelace per giungere a qualcosa di veramente innovativo. Charles Babbage nacque nel 1791 da una
famiglia benestante e si rivelò ben presto un genio matematico. Fu proprio lavorando alla correzione dei numerosi errori da lui individuati nelle tavole logaritmiche
che gli venne l’idea di costruire un apparecchio di calcolo. Nel 1822 egli presentò
alla Royal Astronomical Society il primo modello di Macchina differenziale, una
macchina in grado di eseguire i calcoli necessari per costruire le tavole logaritmiche
e il cui nome derivava da una tecnica matematica chiamata calcolo differenziale.
La Royal Astronomical Society incoraggiò Babbage a perfezionare l’apparecchio.
Insieme a Lady Ada Augusta contessa di Lovelace, figlia di lord Byron, Babbage
intraprese un progetto molto ambizioso, la costruzione della Analytical Engine,
ossia la Macchina analitica. Questo apparecchio, che riceveva i comandi da una
scheda perforata, doveva essere in grado di calcolare i valori di funzioni matematiche molto più complesse della funzione logaritmo, ma fin dagli inizi difficoltà di
ogni tipo ne limitarono il funzionamento. La macchina doveva essere gigantesca (a
giudicare dai pochi disegni rimasti nel progetto), tanto da occupare tutto l’enorme
laboratorio di Babbage.
STORIA DELL’INFORMATICA START – INFORMAZIONI E CALCOLATORI
97
Dall’Ottocento al Novecento
A Babbage vennero a mancare i finanziamenti del governo inglese, poiché non onorò il primo contratto stipulato, quello relativo alla seconda macchina differenziale
(più grande della prima). Per questa ragione, e non per inadeguatezza tecnologica,
come è stato spesso scritto, egli dovette rinunciare alla costruzione della macchina
analitica.
La macchina analitica si basava su due principi di funzionamento sorprendentemente moderni:
• una parte chiamata store o memoria;
• una parte chiamata mill o unità di calcolo.
Chi riuscì a costruire una macchina differenziale funzionante, come riconobbe lo stesso Babbage, fu lo svedese
Georg Scheutz, il primo a realizzare una macchina da
calcolo con meccanismo stampante e, soprattutto, il primo europeo a esportare tecnologie di calcolo negli Stati
Uniti, aprendo in questa nazione l’era del calcolo automatico. La macchina di Scheutz fu acquistata dall’osservatorio astronomico di Albany, nello stato di New York,
per calcolare le posizioni di alcuni astri.
Nel 1847, l’inglese George Boole con la sua opera Mathematical analysis of logic
gettò le basi del sistema logico binario.
Nel 1880 fu svolto negli Stati Uniti il censimento della popolazione e le registrazioni trattate manualmente consentirono di usufruire dei risultati soltanto sette anni
dopo.
Quando nel 1890 si dovette ripetere il censimento, in molti ebbero il timore che i
risultati non si potessero conseguire prima della fine della decade, poiché nel decennio trascorso la popolazione era notevolmente aumentata. Per superare il problema,
un ingegnere che collaborava con l’Ufficio Censimento degli Stati Uniti, Herman
Hollerith, riprese il concetto della scheda perforata, adattandolo alle esigenze del
censimento e suggerendo di registrare sulla scheda tutti i dati, in modo da poterli
sottoporre a una parziale elaborazione meccanica.
L’idea era, quindi, quella di perforare i dati su schede e di rilevare la presenza di una
perforazione mediante aghi percorsi da corrente elettrica. Le macchine di questo
tipo, chiamate tabulatrici, vennero utilizzate nei vari uffici governativi per l’elaborazione dei dati del censimento. Si passò, così, da sette anni a sei settimane per ricevere
il risultato del censimento.
Da quel momento, l’applicazione di queste unità meccanografiche si estese in modo
repentino e iniziò il loro impiego anche nel settore commerciale. Per la produzione
di tali apparecchiature, nel 1896 Hollerith fondò una società per sfruttare il brevetto,
la Tabulating Machine Company che, sotto la guida di Thomas Watzon sr, diventerà,
nel 1924 la International Business Machine Corporation (IBM).
98
START – INFORMAZIONI E CALCOLATORI
STORIA DELL’INFORMATICA
Per ulteriore conferma delle intuizioni di Babbage, si dovette attendere il 1936,
quando un giovane matematico di Cambridge, Alan Turing, pubblicò un articolo
sulla rivista On Computable Numbers. Il nome di Turing è rimasto pressoché sconosciuto ai più, ma il suo apporto contribuì notevolmente allo
sviluppo dell’informatica.
Turing fu alla guida di un gruppo di ricercatori e sviluppò l’invenzione più segreta della seconda guerra mondiale, Colossus,
il primo computer elettromeccanico, costruito da T. H. Flowers.
Questo apparecchio fu utilizzato per decifrare il codice segreto
tedesco Enigma durante il conflitto.
Nel 1939 Konrad Zuse costruì lo Z1, primo di una innovativa
serie di calcolatori elettromeccanici basati sul sistema binario
e programmabili, funzionanti prima a memorie meccaniche
e poi a relè. La macchina presentava una struttura già del tutto
analoga a quella dei computer moderni, poiché anche essa
faceva la distinzione tra unità di memoria e unità di calcolo,
e funzionava alla velocità di clock di un solo Hertz, generata
da un motore elettrico.
Gli studi di Zuse e quelli di John Vincent Atanasoff, inventore della memoria rigenerativa, furono la base principale
per le successive innovazioni apportate all’architettura dei
computer di cui, come vedremo a breve, il principale artefice
fu John von Neumann.
Il convegno internazionale di Informatica del 1998 riconobbe a Konrad Zuse con il
suo Z1 il ruolo di inventore del primo computer programmabile funzionante della
storia.
Dopo la guerra, Turing si recò negli Stati Uniti, dove partecipò
al primo progetto americano di computer, l’ENIAC (Electronic
Numerical Integrator And Computer) il primo calcolatore elettronico messo in funzione nel 1946 per usi concreti nella storia
(aveva, comunque, una base di calcolo decimale e non binaria).
L’apparecchio, progettato dall’Università di Pennsylvania, impiegava 18.000 valvole (ne saltava una ogni due minuti, a causa dell’eccessivo calore generato dalla macchina) e occupava uno spazio di
180 metri quadrati. L’ENIAC pose fine all’era dei calcolatori meccanici, perché fu il primo calcolatore elettronico della storia.
Il primo computer Turing-completo basato sul sistema numerico
binario e totalmente programmabile fu lo Z3, costruito in Germania
da componenti riciclati di telefonia da Konrad Zuse, che lo realizzò
praticamente da solo, nel 1941. Lo Z3 venne poi distrutto in un
bombardamento dagli alleati, e per molti anni ne è stata ignorata
perfino l’esistenza; di conseguenza il primato di primo computer
della storia è stato ingiustamente riconosciuto alla macchina statunitense ENIAC.
STORIA DELL’INFORMATICA START – INFORMAZIONI E CALCOLATORI
99
Dagli anni Cinquanta agli anni Settanta
Nel 1948 furono utilizzati i transistor al silicio, che,
rispetto alle valvole, permisero di ottenere velocità
di calcolo impressionanti, maggiore accuratezza e
bassa generazione di calore. Al pari delle valvole, i
transistor vennero impiegati come interruttori elettronici.
A metà degli anni Sessanta, gli scienziati riuscirono a produrre circuiti miniaturizzati e, grazie alle ingenti somme di
denaro investite nella ricerca spaziale, vennero prodotti i
primi circuiti integrati su singoli chip di silicio. Questi componenti hanno consentito di compiere un ulteriore balzo
in avanti nella costruzione dei computer. È proprio grazie a
questa scoperta che inizia la corsa alla miniaturizzazione dei componenti elettronici,
coronata dall’integrazione in un solo chip di più circuiti. Nacque, così, il microprocessore: il primo fu l’INTEL 4004, costruito negli Stati Uniti da un team di cui faceva
parte l’italiano Federico Faggin. Sebbene il microchip sia poco simile alla gigantesca
“macchina analitica” di Babbage e Lovelace o al Colossus di Turing, l’architettura dei
moderni computer si basa ancora sui principi impostati da
Babbage e la teoria enunciata da Turing rimane ancora oggi
importante.
Tra gli uomini che hanno fatto la storia dell’elaborazione
automatica occorre ricordare anche l’“architetto” dei moderni computer, John von Neumann, il quale prese parte
al progetto ENIAC come consulente per la parte logica
del sistema. Il suo lavoro ha influenzato enormemente i
successivi sviluppi dell’informatica. Egli suggerì, tra l’altro, di dotare i futuri computer di programmi interni allo
stesso apparecchio e di impiegare la numerazione binaria
per rappresentare programmi e dati nella memoria del
computer, recuperando le intuizioni del tedesco Zuse e
di Atanosoff che, come abbiamo visto, per primi avevano
costruito calcolatori funzionanti a relè e, quindi, basati sul
sistema binario.
Con l’introduzione di tali concetti, gli elaboratori elettronici superarono, pertanto,
la prima struttura elementare e assunsero le caratteristiche conservate e sviluppate
fino ai nostri giorni. Mettendo in pratica le sue idee, von Neumann, che lavorò in
costante collaborazione con un gruppo di esperti militari e di professori universitari
di Princeton, costruì intorno al 1952 un calcolatore denominato IAS o Princeton o
Macchina di von Neumann.
100
START – INFORMAZIONI E CALCOLATORI
STORIA DELL’INFORMATICA
La flessibilità operativa di questa macchina fece sì che congegni nati allo scopo di
alleviare i problemi di calcolo per tecnici e scienziati potessero essere impiegati in
futuro nella soluzione di problemi di natura completamente diversa, di tipo amministrativo, gestionale e produttivo. La diffusione nell’uso degli elaboratori elettronici ha contribuito quindi alla nascita di una nuova area scientifica e tecnologica,
che va ormai comunemente sotto il nome di informatica.
Nel 1970 nei laboratori Xerox di Palo Alto viene concretizzato un progetto molto
in avanti sui tempi, che vide la prima luce due anni dopo, nel 1972: lo Xerox Alto.
Prodotto dal Palo Alto Research Center (PARC), questo è il primo computer nella
storia a essere dotato di un display bitmap a finestre con capacità di sovrapposizione, connesso alla prima stampante laser, collegato alla prima rete Ethernet in
local area network (LAN), e dotato del primo linguaggio orientato agli oggetti:
Smalltalk. Lo Xerox Alto rimarrà un concept computer, ma darà il vita al progetto
Xerox Star (1981), il primo computer in assoluto sul mercato dotato di interfaccia
GUI (Graphical User Interface) a icone, con mouse, i cui concetti e le cui soluzioni
ispireranno tutto il mondo dell’informatica di là da venire.
Nell’aprile 1975 nei laboratori di Ricerca & Sviluppo della Olivetti di Ivrea, giovani ingegneri e diplomati non stavano a guardare e alla fiera di Hannover venne
presentato il P6060, primo personal al mondo con floppy disk incorporato. Era
in concorrenza con un prodotto IBM simile ma dotato di floppy disk esterno. Nel
successivo prodotto, l’M20 (1982) l’azienda adottò per la prima volta il microprocessore.
Infine, sono da menzionare Steve Wozniac e Steve Jobs, che fin da giovanissimi
progettavano computer. Pochi altri hanno contribuito alla miniaturizzazione e
alla diffusione su larga scala del computer. Tra le loro invenzioni ricordiamo l’Apple II (che oggi è un computer da collezionisti), realizzato con l’aiuto finanziario
di Mike Markkula nel 1977: esso fu il primo personal computer della storia a
impiegare unità a dischetti e rimane ancora oggi uno dei più grandi successi commerciali della storia dell’informatica. Wozniac ha lavorato fino a pochi anni fa a
nuovi progetti per Apple Corporation, di cui Jobs è il presidente (almeno sino al
momento di redazione di questo volume).
La novità introdotta dall’Apple II non riguardava solo l’hardware ma anche un
componente del suo software: il BASIC, un linguaggio che garantiva una programmazione molto più agevole rispetto ai codici esadecimali e ottali dei primi
computer. Dal punto di vista hardware, l’Apple II disponeva di una memoria di
massa costituita da un floppy disk da 5,25 pollici.
Nello stesso periodo altri costruttori diedero l’avvio a una grande
corsa al ribasso dei prezzi. Realizzarono macchine potenti quanto i
primi personal computer, ma decisamente più economiche. Fu l’era
di Sinclair, con lo ZX-80 e lo Spectrum, e della Commodore, con il
C64, i primi home computer della storia.
STORIA DELL’INFORMATICA START – INFORMAZIONI E CALCOLATORI
101
Dagli anni Ottanta a oggi
Agli inizi degli anni Ottanta, al già gremito mercato di case costruttrici di personal computer si aggiunse IBM, che
introdusse sul mercato il PC IBM o IBM
5150, una macchina basata su un potente microprocessore, l’Intel 8088, e mise
gli schemi tecnici a disposizione di tutti i
produttori di accessori per computer che,
in tal modo, realizzarono ogni genere di
schede aggiuntive. Nacque così la seconda generazione dei personal: i businnes
o professional computer, che avevano
un prezzo quasi analogo ai loro predecessori, ma erano molto più potenti.
Il PC IBM divenne lo standard e con esso anche il suo sistema operativo, il CP/M,
che, per le esagerate condizioni di licenza d’uso imposte da Digital Research venne
sostituito con l’MS-DOS, Disk Operating System progettato dalla Seattle Computer
Company e acquistato per poche centinaia di dollari da Bill Gates che nel 1977,
insieme con Paul Allen e Steve Ballmer fondò Microsoft, una delle più potenti software house del mondo.
Il 27 giugno 2008, dopo 33 anni, Bill Gates dà ufficialmente le
dimissioni da presidente lasciando il suo posto a Steve Ballmer,
suo cosiddetto braccio destro da ormai più di due da anni. Ora
Gates si dedica a tempo pieno alla sua Foundation, insieme
alla moglie Melinda Gates, e alla ricerca di nuovi software e
hardware, per una maggior semplicità di utilizzo da parte degli
utenti.
Il successo di IBM non passò inosservato, le industrie informatiche delle “tigri orientali” (Taiwan, Singapore e così via) si
misero subito al lavoro per clonare il PC IBM. La clonazione,
cioè la duplicazione, fu possibile poiché IBM forniva assieme al
PC anche gli schemi elettrici, e il listato del sistema operativo
era facilmente ottenibile. Il passo per la produzione industriale
dei cloni fu brevissimo. In pochi anni il mondo fu invaso da
enormi quantità di PC clonati, dalle prestazioni sempre più
brucianti e dai costi sempre più bassi.
Nel 1984 Apple produce il secondo passaggio evolutivo che porta agli attuali personal computer. Dopo l’insuccesso dell’Apple Lisa, che, nel 1983 fu il primo computer
(commerciale e su larga scala) dotato di serie di interfaccia grafica e di mouse, troppo costoso e con un design poco appariscente, l’azienda di Cupertino (California)
decide di ritentare l’impresa col Macintosh, decisamente più elegante nel design e
nell’approccio all’interfaccia grafica. Nasceva così il concetto di WIMP (Windows
Icons Mouse and Pointer).
Il primo modello di Mac fu messo in vendita al prezzo di 2.495 dollari e ottenne
un successo di mercato senza precedenti, grazie al suo approccio amichevole (userfriendly) e alla facilità d’uso del suo sistema operativo, il Mac OS. La sua interfaccia grafica (GUI) usava per la prima volta metafore facili da comprendere, quali il
cestino, la scrivania, le finestre, gli appunti e così via, aprendo finalmente l’uso del
computer anche a persone con limitate conoscenze informatiche.
102
START – INFORMAZIONI E CALCOLATORI
STORIA DELL’INFORMATICA
In seguito al successo mondiale del Macintosh, molte di queste caratteristiche innovative furono mutuate da Microsoft nella creazione del proprio sistema operativo
Windows, scatenando una battaglia anche legale durata oltre un decennio.
Nel 1987 nasce Amiga2000. Amiga è una piattaforma informatica originariamente ideata da una piccola compagnia americana,
Hi-Toro. Questo gruppo d’informatici e ingegneri inizialmente
voleva creare una macchina da gioco dalle grandi capacità grafiche e sonore. In seguito, a mano a mano che il progetto avanzava, Hi-Toro incorporò alla proto-console caratteristiche proprie
di un personal computer multimediale coordinate da un elegante sistema operativo, AmigaOS, che già allora offriva un reale
preemptive multitasking. Era il 23 luglio 1985 quando venne
mostrato al mondo l’Amiga 1000 da Andy Warhol. Nacque così
la piattaforma che fu soprannominata Advanced Multitasking
Integrated Graphics Architecture, in breve AMIGA.
Hi-Toro fu poi acquisita, insieme al progetto Amiga, da una
famosa casa produttrice di personal computer, Commodore, la
quale commercializzò il prodotto dall’ottobre del 1985. Date le
eccezionali caratteristiche di Amiga per l’epoca, la piattaforma raccolse un notevole
seguito tra gli esperti e gli appassionati di informatica che si distinsero per un notevole spirito di comunità.
Tuttavia una serie di errori strategici e lo scarso interesse degli amministratori di
Commodore verso Amiga portarono alla bancarotta dell’azienda che andò in liquidazione volontaria nell’aprile del 1994, con conseguente vendita della tecnologia
Amiga ad una serie di aziende specializzate in personal computer che non seppero
rivalutarla adeguatamente: di fatto la piattaforma finì per essere sostenuta prevalentemente da una schiera di affezionati utenti e programmatori.
Dopo oltre 25 anni di primato nell’industria dell’hardware, nel dicembre 2004 IBM,
pur essendo tra i leader del mercato, decide di abbandonare la fabbricazione dei personal computer di ogni tipo, dai desktop ai notebook, cedendo marchio e quote di
mercato alla cinese Lenovo, azienda che detiene il primo posto per vendite in Asia,
escludendo il Giappone. L’accordo prevede la fornitura dei servizi da parte di IBM a
Lenovo, che diviene così il terzo produttore mondiale.
Attualmente si assiste a una specializzazione nella produzione dell’hardware per cui
le grandi case produttrici tendono a sviluppare i singoli componenti (schede madri,
CPU, schede grafiche e così via) piuttosto che prodotti completi.
Delle grandi case che producevano sia hardware sia software sono attualmente attivi
solo pochi marchi, tra cui, ad esempio, Sun Microsystems, che continua a detenere
un primato per i grandi server.
STORIA DELL’INFORMATICA START – INFORMAZIONI E CALCOLATORI
103
Scarica

Informazioni e calcolatori - e