Si può rappresentare l’informazione attraverso varie forme:
Numeri
Testi
Suoni
Immagini
Scopo di questa lezione è quello
di mostrare come tutte queste informazioni possano essere rappresentate all’interno
di un elaboratore ovvero come tutte le
informazioni possono essere rappresentate mediante stringhe composte
dai simboli "0" e "1".
Uso di tecnologia digitale:
Il calcolatore è in grado di manipolare solo due simboli elementari che noi
codifichiamo normalmente in "0"
ed "1".
All’interno
della CPU le informazioni vengono rappresentate da 2 possibili valori di
tensione elettrica, in generale, a
seconda del tipo di dispositivo considerato, i valori zero ed uno sono
rappresentati:
da una tensione elettrica (alta, bassa);
da un differente stato di polarizzazione magnetica (positiva, negativa);
da luce e buio;
Notazioni e definizioni
BIT: la parola BIT deriva da BInary digiT, termine inglese che significa cifra binaria e che noi siamo abituati a rappresentare con i simboli "0" e "1".
BYTE: è l’entità
elementare di memorizzazione dell’informazione ed è costituita da 8 bit.
È facile comprendere che con 2 soli simboli è possibile rappresentare un’informazione
estremamente limitata e, quindi, bisogna
aggregare questi simboli in entità che ci consentono di rappresentare informazioni
ben più complesse.
È stata assunta un’entità standard costituita da 8 bit che costituiscono
l’elemento di memorizzazione fondamentale.
Possiamo pensare che un byte è costituito da
una sequenza ordinata di 8 bit, dove il bit più a destra assume la
posizione convenzionale 0 ed il bit più a
sinistra assume la posizione convenzionale 7.
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||
Bit più significativo |
Bit meno significativo |
Più in generale se abbiamo n+1 bit partiremo dalla posizione 0, il cosiddetto bit meno significativo e raggiungeremo la posizione n-esima che rappresenta il bit più significativo.
n |
n-1 |
0 | |||||||
Bit più significativo |
Bit meno significativo |
Multipli del Byte
Kilobyte (Kb)
1024 byte (210 byte)
Megabyte (Mb) 1.048.576 byte (220 byte)
Gigabyte (Gb) 1.073.741.824 byte (230
byte)
Numero di oggetti rappresentabili con n bit
Con n bit è possibile
rappresentare 2n simboli.
Per dimostrarlo utilizziamo il metodo induttivo.
Con 1 bit è possibile
rappresentare due simboli: uno che corrisponde allo 0 e l’altro all’1.
Con 2 bit, 4 simboli 00, 01, 10, 11.
Con 3 bit, 8 simboli 000, 001, 010, 011, 100,101, 110, 111.
Con n - 1 bit si possono rappresentare 2n - 1 simboli. E con n bit?
Usare n bit significa
aggiungere un bit ai n-1. Tale bit può avere solo due configurazioni: 0
o 1.
Quindi con n bit avremo 2n - 1 simboli che corrispondono al valore
0 del bit aggiunto (l’n-esimo) e 2n-1 che
corrispondono al valore 1 del bit aggiunto, quindi:
2n - 1 + 2n - 1 = (1 + 1) * 2n - 1 = 2 * 2n - 1 = 2 1 * 2n - 1 = 2(n - 1)+1 = 2n.
Numero di bit necessari per rappresentare N oggetti
Dobbiamo fare in modo che la
combinazione dei bit sia maggiore o uguale al numero dei simboli.
In particolare ciò si traduce nella formula:
2n >= N
ossia dobbiamo scegliere il numero minimo di bit n per il quale 2n è maggiore o al più uguale al numero di simboli che vogliamo rappresentare. Da questa formula, passando al logaritmo in base 2 entrambi i membri, otteniamo il valore di n:
n >= log2 N
Evidentemente, log2 N non sarà in generale un valore intero, quindi dobbiamo fare in modo che questa relazione ci produca un numero intero di bit.
Per cui scriveremo che n è
la parte intera di log2 N aggiungendo ancora 1 (arrotondiamo
in eccesso all’intero più vicino).
In alternativa basta cercare l’n per il quale 2n è
>= N.
Es.: supponiamo di avere N = 87 oggetti e supponiamo di voler determinare il numero n di bit richiesto per rappresentare questi 87 oggetti:
2n >= 87
n >= log2 87
log2 87 = 6.65 circa, per cui l’intero maggiore od uguale a 6.65 è n = 7 bit.
Per 87 oggetti occorrono 7 bit. Si noti che in realtà con 27 = 128, ossia con 7 bit potremmo rappresentare 128 oggetti distinti e quindi abbiamo una certa discrezionalità nello scegliere le configurazioni, dobbiamo perciò stabilire con precisione quale configurazione è associata a ciascun oggetto. Alternativamente 26 = 64 e 27 = 128, ne consegue che ho bisogno di almeno n = 7 bit.
Supponiamo ad esempio di voler codificare tre colori: il Rosso, il Verde, il Blu (sono i tre colori fondamentali che permettono in un video di un computer di comporre tutti gli altri colori).
Abbiamo quindi N = 3; n si
calcola tramite le formule precedenti e si ha n = 2.
Quindi abbiamo 22 = 4 combinazioni, che sono: 00, 01, 10, 11
Abbiamo detto di voler codificare il R, il V, il B.
Possiamo allora scegliere per esempio la seguente corrispondenza:
00 | Rosso
01 | Verde
10 | Blu
11 | combinazione non utilizzata
Oppure:
00 | Blu
01 | Rosso
10 | combinazione non utilizzata
11 | Verde
Codice ASCII
I caratteri di un testo vengono codificati tramite sequenze di bit, utilizzando un codice di traduzione.
Uno dei più diffusi codice di
caratteri è il Codice ASCII (ASCII è un acronimo e sta per American
Standard Code for Information Interchange).
È un codice di 7 bit che offre dunque la possibilità di esprimere 128 simboli
diversi. In generale si utilizza il codice ASCII esteso, che utilizza 8
bit, e aggiunge altri 128 simboli specifici della nazione in cui ci si trova o
del sistema operativo che si utilizza.
In alcuni casi i 7 bit sono utilizzati quando l’informazione viene trasferita da un calcolatore ad un altro dispositivo, ed allora minimizzare il numero di bit di rappresentazione vuol dire minimizzare il tempo di trasmissione dell’informazione stessa.
Il codice ASCII esteso utilizza invece 8 bit (256 caratteri).
In
trasmissione l'ottavo bit funziona come bit
di parita' per individuare errori.
Il valore (0 o 1) del bit di parità è scelto in modo che la sequenza di 1 sia
pari.
Ad esempio: 0 => 4810 => 0 011 00002
Il codice ASCII, è stato creato dallo ANSI (American National Standardization Institute).
Per comprendere meglio la codifica
facciamo un esempio.
La parola "CIAO" viene rappresentata all’interno
di un elaboratore come sequenza di caratteri codificati in ASCII, come segue:
c | i | a | o |
01000011 | 01001001 | 01000001 | 01001111 |
1° byte | 2° byte | 3° byte | 4° byte |
Le sequenze binarie hanno lo
svantaggio d’essere molto lunghe in relazione alla quantità d’informazione
che rappresentano.
All’interno del computer non si può fare diversamente, ma per gli esseri
umani ricordare e scrivere "0" ed "1" è un’attività
tediosa oltre che difficile. Si cerca quindi di rappresentare
in forme più concise tali sequenze, per rendere più snella l’operazione di
scrittura.
La rappresentazione esadecimale è la più
utilizzata.
Rappresentazione dei numeri
Passiamo adesso alla codifica di
un’altra classe di informazioni di grande rilevanza: i numeri.
Nella codifica ASCII, chiamata anche
"CODIFICA DI CARATTERE" (in quanto ad ogni carattere corrisponde
un codice che utilizza un byte), possiamo rappresentare i numeri.
Per esempio 1237 è rappresentato come sequenza di 4 byte:
un primo byte che contiene la codifica ASCII della cifra 1 (00110001)
un secondo byte che contiene la codifica ASCII della cifra 2 (00110010) ...
...
un quarto byte che contiene la codifica ASCII della cifra 7 (00110111)
Questa forma di rappresentazione
di un numero è idonea per la rappresentazione su video o per un testo
ma non è adatta per effettuare dei calcoli.
Possiamo, quindi, sinteticamente affermare che all’interno
del nostro elaboratore abbiamo:
codifica per i testi -> ASCII
codifica per i numeri
Dobbiamo innanzi tutto capire
quale è la differenza fra la rappresentazione di un numero ed il suo
valore vero.
Per esempio, quando pensiamo al numero intero 4 come concetto astratto, possiamo
rappresentarlo in modi diversi: con le dita di una
mano, secondo la nostra codifica di sistema decimale,
in numeri romani.
Esistono quindi almeno tre rappresentazioni per la stessa entità.
In particolare delle tre rappresentazioni c’è ne è una che ha una certa rilevanza ed è quella usata comunemente da noi umani: il sistema di rappresentazione decimale posizionale.
Sistema Posizionale
Un sistema posizionale è caratterizzato
da una base o radice che indicheremo con la lettera r e
da un insieme di cifre di che vanno
da 0 a (r-1).
Il sistema decimale ha una base r = 10 che utilizza 10 cifre: 0, 1, 2,
…, 9.
Se avessimo r = 3 avremmo le seguenti cifre: 0, 1, 2.
Prima di vedere cosa succede all’interno di un elaboratore, vediamo come è possibile passare, in un sistema posizionale, dalla rappresentazione di un numero al suo valore o viceversa.
In un sistema di rappresentazione posizionale il generico numero n è rappresentato da una sequenza di cifre:
N = dm dm-1... d1 d0
ove ciascuna di queste cifre appartiene all’insieme proprio del sistema di numerazione.
Per esempio se fosse N = 1732 il suo valore si otterrebbe tenendo presente che abbiamo 2 unità, 3 decine, 7 centinaia, 1 migliaio e dunque:
N = 1 migliaio + 7 centinaia + 3 decine + 2 unità
Ciò significa che all’entità 2 associamo un peso di 100, all’entità 3 il peso 101, all’entità 7 il peso 102, e all’entità 1 il peso 103.
Da questa semplice considerazione
possiamo ricavare quella che è una regola
dei sistemi di rappresentazione
posizionale (posizionale perché ad
ogni cifra è associato un ben determinato peso che
dipende dalla posizione della cifra all’interno del numero).
Da quanto detto è possibile dedurre alcune regole:
Assegnato un numero intero non negativo N, questo è rappresentato come sequenza di n simboli (cifre):
N = dm dm-1... d1 d0
Il valore del numero è:
Nvalore = dn-1 rn-1 + dn-2 rn-2 + ..... + d1 r1 + d0 r0
essendo: r la base del sistema di numerazione, d le cifre appartenenti all’insieme 0, 1, …, r-1.
Il sistema binario è un
sistema avente come base r = 2 e cifre 0 e 1.
Per convertire un numero dal sistema binario al sistema decimale applichiamo la
formula del valore vero.
Ad esempio, dato il numero 1010 in base 2 si vuole trovare il suo valore
in base 10:
10102 = 1* 23 + 0* 22 + 1*21 +0* 20= 8 +2 = 1010
Il sistema esadecimale ha
una base r = 16 avente come cifre i seguenti simboli: 0, 1, 2, …, 9, A,
B, C, D, E, F
con valori 0, 1, …, 9, 10, 11, 12, 13, 14, 15 rispettivamente.
Ad esempio: 10F216 = 1
* 163 + 0 * 162 + F * 161 + 2* 160
= 1 * 4096 + 15 * 161 + 2*1
= 1*4096 + 15*16 + 2*1 = 4096 + 240 + 2 = 4338(10)
Conversione dalla base 2 alla base 10
Dato un numero nel sistema decimale, vogliamo vedere come questo viene rappresentato all’interno dell’elaboratore in termini di 0 ed 1, ossia vogliamo effettuare la conversione da sistema decimale a sistema binario.
In realtà consente di passare dalla rappresentazione in base 10 ad una rappresentazione in una base r qualunque N10 -> Nr
Come sappiamo il valore di un numero è esprimibile mediante la relazione:
N10 = dn-1 rn-1 + dn-2 rn-2 + ..... + d1 r1 + d0 r0
mettiamo a fattore comune r (la base) fra le prime n-1 entità:
N10 = r ( dn-1 rn-2 + dn-2 rn-3 + … + d1 ) + d0
ponendo la quantità entro le parentesi tonde ( dn-1 rn-2 + dn-2 rn-3 + … + d1 ) = Q0, possiamo scrivere:
N10 = r Q0+ d0
Tale espressione fa immediatamente pensare alla definizione euclidea di divisione, infatti:
N10 è il dividendo r è il divisore Q0 il quoziente d0 il resto.
Sappiamo che il dividendo è uguale al divisore per il quoziente più il resto, ossia:
D = d Q + R
Ne consegue che effettuando la
divisione intera fra N10 e il valore decimale della base r cui
si vuole passare (ad esempio 210)
otterremo che il resto d0 è la cifra meno significativa nella
rappresentazione in base r.
Si noti che tale cifra è sicuramente compresa nell’insieme 1, 2, …, r –
1 in quanto il resto di una divisione
intera è sicuramente inferiore al divisore r.
Se consideriamo adesso:
Q0 = dn-1 rn-2 + dn-2 rn-3 + ..... + d1 = r (dn-1 rn-3 + dn-2 rn-4 + ... +d2) + d1 = r Q1+ d1
possiamo ancora una volta paragonare Q0 = r Q1+ d1 con la definizione euclidea, avendo individuato la cifra di posto 1 (d1) nella nuova rappresentazione.
Iterando il procedimento ci fermeremo quando Qi = 0.
Esempio: Convertire in forma binaria N10=331
Divisione |
Quoziente |
Resto
(ai) |
331 : 2 |
165 |
1 |
165 : 2 |
82 |
1 |
82 : 2 |
41 |
0 |
41 :2 |
20 |
1 |
20 : 2 |
10 |
0 |
10 : 2 |
5 |
0 |
5 : 2 |
2 |
1 |
2 : 2 |
1 |
0 |
1 : 2 |
0 |
1 |
quindi:
(331)10
= (101001011)2
Operazioni
aritmetiche tra numeri binari
Il
calcolatore ha al suo interno dei dispositivi adatti ad effettuare le operazioni
elementari sui numeri
binari:
moltiplicazione, somma, divisione e sottrazione.
Dato
che il sistema di numerazione binario è posizionale, è evidente che le leggi
che regolano tali operazioni sono identiche a quelle dell’aritmetica dei
numeri decimali, tenendo conto della base del sistema di rappresentazione e del
numero di bit che si vuole utilizzare.
Supponiamo d’avere due numeri binari
A = A n-1…A
i+1
Ai
A
i-1…A1A0
B
=
B
n-1…B
i+1
Bi
Bi-1…B1B0
che utilizzano n bit (se uno dei due ha m < n bit basta aggiungere n – m zeri davanti).
Addizione
A i | B i | Somma | Riporto |
0 | 0 | 0 | 0 |
0 | 1 | 0 | 0 |
1 | 0 | 1 | 0 |
1 | 1 | 0 | 1 |
Sottrazione
A i | B i | Diff. | Riporto |
0 | 0 | 0 | 0 |
0 | 1 | 1 | 1 |
1 | 0 | 1 | 0 |
1 | 1 | 0 | 0 |
Shift
Si
vuole introdurre una nuova operazione detta di scorrimento o meglio di shift
che non trova un diretto
riscontro sulle operazioni che facciamo sul sistema decimale.
Per tale operazione è fondamentale stabilire il numero di bit che si
utilizzano.
L’operazione di scorrimento può essere effettuata
sia a sinistra sia a destra.
Shift a sinistra
Se
ho scorrimento a sinistra il bit di posto i va
ad occupare la posizione i + 1, il bit più significativo viene
eliminato e il bit meno significativo assume valore zero.
Supponiamo di avere il numero 001011 di 6 bit e di effettuare shift a sinistra.
Numero iniziale
0 0 1 0 1 1 11(10)Come si vede, finché non esce il primo bit di
valore 1 (ossia diverso da zero), è come se moltiplicassimo per la base
(essendo la base 2 in pratica raddoppiamo il numero).
Ciò avviene in modo
simile in base 10: se stabiliamo di avere 4 cifre, il numero 0047 dopo uno shift
varrà 0470, dopo due shift 4700.
In ogni caso dopo aver operato un numero di shift pari al numero di bit stabiliti il numero varrà zero e continuerà ad esserlo operando ulteriori scorrimenti a sinistra.
Rappresentazione dei numeri relativi
Fino ad ora abbiamo trattato
numeri interi positivi, ma per le esigenze di calcolo è importante saper
rappresentare numeri relativi.
Esistono almeno 3 modi per rappresentare i numeri relativi:
1. rappresentazione in modulo e segno
2. rappresentazione in complemento alla base (normalmente chiamata complemento a 2)
3. rappresentazione in complemento alla base diminuita (chiamata complemento a 1)
Di fatto tutti gli elaboratori
(con pochissime eccezioni) utilizzano, per la rappresentazione dei numeri
relativi, la rappresentazione in complemento a
due.
Modulo e segno
È la più facile da intuire ed è
quella che ha una corrispondenza diretta con la nostra usuale rappresentazione
dei numeri.
Noi anteponiamo al valore assoluto di un numero un simbolo che denota
se esso è positivo o negativo.
Utilizziamo 2 entità: il modulo ed il segno.
Ad esempio +3 e -3 hanno stesso modulo (3) ma segno differente.
Tenendo presente che il segno deve essere rappresentato in binario possiamo facilmente intuire come ottenere un numero binario relativo. Stabilito il numero di bit, il bit più significativo ha valore di segno:
1. se 0 il segno è +
2. se 1 il segno è –
È evidente che se utilizziamo n bit, uno verrà sacrificato per rappresentare il segno. Si noti che anche in questo caso è fondamentale stabilire il numero di bit che si utilizzano.
Complemento alla base (Complemento a 2)
Stabilito il numero di bit, supponiamo n, il bit più significativo ha peso: -(2n-1)
Sulla base di questa considerazione possiamo riscrivere quella formula che, data la sequenza di bit, mi esprimeva il valore vero del numero:
Nvalore = - dn-1 (2n-1) + dn-2 2n-2 + ...+ d0 20
Data una sequenza di bit che rappresenta un numero relativo in complemento a due posso ricavare il valore vero del numero sulla base della relazione appena esposta.
Esempio:
Nvalore = 0101(C2) N = -0 *(23)
+ 1 * 22 + 0 * 21 + 1 * 20 = 4 + 1 = 5
Nvalore = 1011(C2) N = -1* (23)
+ 0 * 22 + 1 * 21 + 1 * 20 = -8 + 2 + 1= -5
Complemento alla base diminuita (Complemento a 1)
Stabilito il numero di bit,
supponiamo n, il bit più significativo ha peso: -(2n-1-1)
Sulla base di questa considerazione possiamo
riscrivere quella formula che, data la sequenza di bit, mi
esprimeva il valore vero del numero:
Nvalore = - dn-1 (2n-1-1)
+ dn-2 2n-2 + ...+ d0
20
Data una sequenza di bit che rappresenta un numero relativo in complemento a 1 posso ricavare il valore vero del numero sulla base della relazione appena esposta.
Esempio:
Nvalore = 0101(C1) N = -0 *(23-1) + 1 * 22 + 0 * 21 + 1 * 20 = 4 + 1 = 5
Nvalore = 1011(C1) N = -1* (23-1) + 0 * 22 + 1 * 21 + 1 * 20 = -7 + 2 + 1= -4
Nella rappresentazione in complemento il primo bit mi dice se il numero è positivo o negativo, in particolare se il primo bit è 0 il numero è positivo, se il primo bit è 1 il numero è non positivo (ossia negativo o nullo).
Calcolo dell’opposto
Introduciamo un’operazione unaria detta complementazione o negazione. Essendo il sistema binario a due cifre (0 e 1) negare un bit vuol dire scambiare 0 con 1 o viceversa. La complementazione si può applicare a tutti i bit che compongono il numero.
Vediamo com’è possibile calcolare l’opposto di un numero nelle tre rappresentazioni appena viste.
Modulo e segno
Complemento alla base
Complemento alla base diminuita
Vantaggi del complemento a due.
Chiediamoci adesso perché i calcolatori utilizzano al loro interno la notazione in complemento a 2.
Corrispondenza univoca fra rappresentazione binaria e numero decimale
Come abbiamo visto prima il complemento a due è l’unico sistema di rappresentazione che con n bit esprime esattamente 2n numeri interi. È evidente il vantaggio di associare ad ogni combinazione 0-1 un valore univoco.
Semplificazione dei circuiti
Un altro vantaggio è che la
rappresentazione in complemento alla base semplifica la realizzazione dei
circuiti.
Si supponga di essere in modulo e segno e di rappresentare in questa notazione i
numeri +5 e –5, utilizzando 4 bit:
+5 0101(MS)
-5 1101(MS)
supponiamo di volerli sommare: applichiamo le regole viste circa la somma dei numeri binari:
0101+
1101=
_____
0010 (MS)
Il risultato è +2. Dove è l’errore?
Abbiamo applicato le regole algebriche di somma bit a bit tra numeri
binari senza tenere conto che il bit più significativo ha la funzione di segno.
L’errore è stato quello di considerare i
numeri 0101 e 1101 come numeri binari assoluti. In effetti se dovessimo effettuare
l’operazione correttamente dovremmo scorporare il primo bit dagli altri e non
potremmo applicare le regole di somma tra
numeri binari opposti in segno. Dovremmo ricordarci che la somma tra
numeri di segno opposto di fatto corrisponde alla differenza.
Tutti questi ragionamenti dobbiamo farli
effettuare ad un elaboratore.
Considerazioni analoghe valgono anche per il complemento alla base
diminuita. Consideriamo, invece, la rappresentazione in complemento a due,
scriviamo il numero +5 ed il numero –5,
utilizzando 4 bit, e sommiamoli:
+5 0101+
-5 1011=
________
0000(C2)
Tale somma viene 0, esattamente
come ci si aspetta. In effetti in notazione complemento a 2 si possono
effettuare le operazioni aritmetiche applicando le regole usuali dell’algebra
binaria senza dover scorporare il bit di
segno. Da un punto di vista dell’architettura del calcolatore i circuiti saranno
sempre gli stessi trattando tutti i bit allo stesso modo e semplificando
enormemente la loro realizzazione e il
costo finale dell’elaboratore.
Nel caso del modulo e segno avremmo dovuto avere un
circuito che trattava il modulo e uno che trattava il segno, e quindi il
circuito sarebbe stato complessivamente
più critico, più complesso.
Riduzione del numero di circuiti
Poiché in complemento a due i
circuiti trattano tutti i bit allo stesso modo si può ad esempio ricondurre
la sottrazione sempre ad una somma. Si supponga di voler eseguire l’operazione:
+5 - (+3). Dovremmo avere un circuito che
realizza la sottrazione.
In realtà la sottrazione può essere effettuata
come una somma: +5 + (-3), basta individuare l’opposto del secondo addendo.
Rappresentazione in virgola mobile
Un numero è esprimibile come:
N = M * rE
dove:
± è il segno del numero (positivo o negativo)
M è la mantissa e rappresenta le cifre essenziali (è un numero in valore assoluto)
E è l’esponente cui elevare la base r (è un numero relativo)
Dato un qualsivoglia numero, si
può esprimere secondo questa notazione.
Ad esempio:
N =
1260 potrebbe esprimersi per esempio nei seguenti diversi modi:
1260 * 100
1.260 * 10+3
0.126 * 10+4
12600 * 10-1
È evidentemente preferibile avere
una rappresentazione unica, e quindi
bisogna cercare di definire uno standard di rappresentazione.
A tal fine si utilizza la notazione scientifica
in forma normalizzata:
la mantissa è espressa come numero frazionario compreso fra la base elevata a -1 e 1:
r -1 <= M < 1 (in base 10 avremo: 0.1 <= M < 1 )
In tal modo non può aversi ambiguità: si stabilisce una corrispondenza biunivoca fra entità numerica e sua rappresentazione.
Mantissa normalizzata equivale ad affermare che la prima cifra dopo la virgola è diversa da zero.
Ad esempio:
0.002 non è in forma normalizzata
0.3 è in forma normalizzata
Supponiamo che la mantissa sia codificata su 3 cifre e l’esponente sia codificato su 2 cifre.
Vogliamo calcolare l’intervallo di rappresentazione (il numero massimo ed il numero minimo esprimibile in queste condizioni).
Il valore massimo lo otterremo quando mantissa ed esponente hanno valore massimo.
Nel nostro caso M = 0.999 che, per semplicità, approssimiamo a 1 ed E = +99 e quindi
NMAX = +0.999 * 1099 che per l’approssimazione fatta è circa uguale a 10+99.
Analogamente il più piccolo valore è circa –1099, mentre il valore frazionario più piccolo è 10–99.
Avendo accertato che questa rappresentazione dei numeri è adeguata a rappresentare grandi intervalli dobbiamo capire come trasferire il tutto alla base 2 per poterla utilizzare mediante l’elaboratore.
A tal scopo dobbiamo riscrivere la formula precedentemente vista secondo questa nuova notazione:
N = (-1) S * M * r E
dove S vale o zero o uno.
-3.02110 verrebbe espresso con (-1)1 * 0.3021 * 10+1
+3.02110 verrebbe espresso con (-1)0 * 0.3021 + 10+1
Avendo fissato la base r dobbiamo memorizzare solo le 3 entità (S; M; E).
Nel caso del numero -3.021 (1; 0.3021; +1).
Codifica della virgola mobile nell’elaboratore
La base è r = 2. La mantissa M è, nella forma normalizzata, un numero frazionario compreso fra 2–1 e 1, ossia 0.5 < M < 1 (M in pratica viene rappresentato in virgola fissa con la virgola posta all’estrema sinistra della sequenza di bit).
L’esponente è un numero relativo che viene rappresentato in complemento a 2 (in realtà si usa la rappresentazione con l’esponente polarizzato).
Ricordandoci che l’elaboratore lavora su un insieme di bit che è potenza di 2, nella maggior parte dei calcolatori la rappresentazione dei numeri in virgola mobile avviene su 32 bit così suddivisi:
il primo bit per il segno (quello
a sinistra: 0 = segno positivo, 1 = segno negativo)
8 bit per l’esponente
23 bit per la mantissa.
± | Esponente | Mantissa |
1 | 8 bit | 23 bit |
Vediamo l’intervallo di rappresentazione.
Ricordandoci la formula scritta precedentemente, il massimo numero positivi sarà dato da 0.111111...1 ossia circa 1 che moltiplichiamo per 2 elevato al massimo valore intero codificabile su 8 bit in complemento a due, che è +127, quindi:
NMAX = +0.111111…1 * 2+127 » +1038
NMIN = -1038