rappresentazione dei dati in memoria

RAPPRESENTAZIONE DEI DATI IN MEMORIA
Abbiamo imparato che tutte le informazioni per poter essere comprese e conservate
dall’elaboratore devono essere in formato binario.
Di seguito vedremo come sono organizzati i dati numerici e come avvengono
conseguentemente le normali operazioni aritmetiche.
Cominciamo con la rappresentazione dei numeri interi.
I numeri interi con segno positivo, quando hanno il segno stesso sottinteso, si
chiamano numeri naturali.
In tal ultimo caso, se abbiamo a disposizione 8 bit per rappresentare un numero, in
pratica possiamo lavorare con tutti i numeri naturali compresi tra il valore decimale
zero (in binario 00000000) e il valore decimale 255 (in binario 11111111).
255 però è un numero troppo piccolo per qualsiasi uso pratico.
Un primo modo di arginare questo problema è quello di accostare tra loro più parole
di 8 bit.
In questo modo, se abbiamo a disposizione per esempio 16 bit, possiamo arrivare a
rappresentare tutti gli interi positivi da zero a 65535.
In generale, se abbiamo a disposizione parole lunghe n bit, possiamo rappresentare
tutti i numeri compresi fra zero e ((2^n) – 1).
La rappresentazione dei numeri in forma di binario puro di cui sopra presenta
comunque un problema, un fenomeno che si chiama overflow.
Con il termine overflow ci si riferisce al fenomeno di traboccamento di un numero
dallo spazio di memoria che ha a disposizione.
In pratica l’overflow è un errore che si presenta quando si tenta di scrivere un numero
più grande del massimo consentito dalla configurazione di n bit.
Per quanto si estenda il numero di bit o si cerchi di affiancare più byte, il fenomeno
dell’overflow è ineliminabile poiché la dimensione della memoria è comunque finita.
Se abbiamo bisogno di rappresentare anche il segno positivo o negativo di un
numero e abbiamo a disposizione 8 bit, il bit più significativo, ovvero quello a
sinistra, verrà dedicato al segno (tecnica del modulo e segno).
In quest’ultimo caso, tutti i numeri che possiamo rappresentare sono tutti i numeri
interi compresi nell’intervallo da –127 a +127.
Rispetto a tale ultima eventualità, un numero negativo più piccolo di –127 non è
dunque rappresentabile.
Tale problema prende il nome di underflow.
Il fenomeno dell’underflow è inverso al problema dell’overflow.
L’underflow infatti si verifica quando si cerca di memorizzare un numero più piccolo
del valore minimo consentito dalla configurazione.
Al fine di rendere semplice al personal computer le operazioni aritmetiche, per
rappresentare i numeri si utilizza la tecnica del complemento a 2.
La tecnica del complemento a 2 si basa sulla tecnica del complemento a 1.
Vediamo allora prima la tecnica del complemento a 1.
Con la tecnica del complemento a 1:
- si scrive il numero in formato binario aggiungendo a sinistra tanti zeri quanti ne
servono per arrivare a 8 bit
- si sostituisce ogni zero con un 1 e viceversa.
La determinazione del complemento a 2, a questo punto, si ottiene semplicemente
aggiungendo il successivo passo:
- sommare 1 al numero ottenuto con il complemento a 1.
La rappresentazione nella memoria dei numeri avviene in pratica nel seguente modo:
- se il numero da rappresentare è positivo, si segue la tecnica del modulo e
segno visto prima
- se il numero da rappresentare è negativo si dovrà applicare la tecnica del
complemento a 2 del numero stesso senza però il segno meno.
Per rappresentare ad esempio in memoria –30 in base 10 bisogna calcolare il
complemento a 2 di 30.
Vediamo un esempio.
Rappresentare in memoria il numero –73.
73 in base 2 è il numero 01001001.
A questo punto bisogna calcolare il complemento a 1 che è la stringa 10110110.
Quindi bisogna sommare 1 ottenendo la stringa 10110111.
La rappresentazione corretta dunque in complemento a 2 di –73 in base 10 è la
stringa 10110111.
Il vantaggio più grande delle precedenti cose si ha nelle operazioni aritmetiche.
Mentre però l’addizione tra numeri positivi non presenta rilevanti differenze perché
sono rappresentati in modulo e segno, la novità riguarda l’addizione tra numeri
negativi, ovvero nella sottrazione, che appunto si trasforma nell’addizione del primo
operando con il complemento a 2 del secondo operando.
In tal ultimo caso, se il risultato presenterà un numero di bit superiore a quello degli
operandi, a causa di un eventuale riporto, si troncherà la cifra più significativa del
risultato, con il numero troncato però che è il risultato della sottrazione.
Si vedano a tal fine i tre successivi esempi.
1) Calcolare 15+39
00001111+
00100111=
00110110
2) Calcolare 45-30
00101101+
11100010=
00001111
Vediamo adesso la rappresentazione dei numeri reali.
Le possibili soluzioni sono 2.
Il primo modo di rappresentare i numeri reali è detto in Virgola Fissa.
Questa tecnica prevede che, all’interno di ogni byte, il punto decimale occupa sempre
la stessa posizione.
In pratica avremo una divisione netta del byte in una zona destinata alla parte intera e
in una zona destinata alla parte decimale, entrambe con la lunghezza prefissa in modo
statico.
Se per esempio immaginiamo di suddividere un byte in una zona di 5 bit per la parte
intera e in una zona di 3 bit per la parte decimale, se la parola contiene la sequenza di
bit 01010101 allora dovremo interpretarla come il numero binario 01010,101
Un modo alternativo per rappresentare in memoria i numeri irreali è la tecnica di
rappresentazione in Virgola Mobile.
Secondo questa tecnica i numeri vengono espressi in forma esponenziale.
Nella figura successiva è riportata una modalità di organizzazione in virgola mobile
su 16 bit.
esponente (4 bit)
Segno esponente (1 bit)
Mantissa (10 bit)
Segno mantissa (1 bit)