Il problema del oveflow

Page 1

La rappresentazione delle informazioni in un computer Seconda parte


Operazioni in binario PoichĂŠ sistema decimale e sistema binario seguono entrambi le regole dei sistemi di numerazione posizionali lo stesso succede quando si vogliono fare operazioni aritmetiche


Addizione Supponiamo di voler sommare due numeri ad otto bit Ad esempio 01011011 equivalente a 64+16+8+2+1=91 in base 10 e 00101110 equivalente a 32+8+4+2=46 Notiamo esplicitamente che abbiamo aggiunto all’inizio degli zeri per fare in modo che i due numeri siano entrambi costituiti da 8 bit


Questa è una cosa che un essere umano normalmente non fa Non iniziamo mai un numero con zero ma con la prima cifra significativa diversa da zero


Se proviamo a scrivere un numero sulla calcolatrice essa eliminerà automaticamente gli zeri che comporremo all’inizio


Inoltre un essere umano non cerca di fare in modo che i numeri siano tutti della stessa lunghezza ma scrive tante cifre quante sono quelle che gli servono Infine un essere umano può sommare numeri anche di dimensioni diverse

1 7 4 + 8 4 3 2 =

8 6 0 6


Un’altra caratteristica dell’uomo è che può pensare e scrivere numeri con un numero di cifre qualsiasi Ha bisogno soltanto di abbastanza inchiostro


Abbastanza carta‌


‌ e di tempo. PerchÊ il Padreterno potrebbe avere altre idee al riguardo


Un computer non ha invece questa capacità Per pensare dei numeri deve poterli scrivere da qualche parte Esso usa degli oggetti che si chiamano registri Ogni registro è costituito da celle ognuna delle quali memorizza un singolo bit


Come tutto quello che è fabbricato dall’uomo, i registri hanno dimensioni standard ad esempio possono contenere 8 bit per cui la lunghezza massima dei numeri è pertanto prefissata Un processore con registri ad 8 bit può “pensare” soltanto numeri lunghi al massimo 8 bit


Possiamo costruire un microprocessore con registri piĂš lunghi ma il discorso non cambia Un microprocessore a 64 bit non potrĂ pensare numeri da 65 bit o oltre!


Va tenuto poi conto che una cella di memoria può assumere soltanto due valori per cui può contenere soltanto 0 o 1 E’ per questo motivo che le celle iniziali anche se non sono utilizzate devono essere poste a zero


Infine c’è il problema dei numeri negativi L’uomo utilizza i simboli + e – Vedremo che il computer utilizzerà il bit più a sinistra per rappresentare il segno del numero per cui ancora una volta è importante che i numeri abbiano la stessa lunghezza


Torniamo alla nostra somma

0

1

0

1

1

0

1

1 +

0

0

1

0

1

1

1

0


Cominciamo a sommare partendo da destra come faremmo in decimale 1+0=1

0

1

0

1

1

0

1

1

+

0

0

1

0

1

1

1

0

=

1


Adesso dobbiamo sommare i bit in seconda posizione 1+1=2 ma in binario 2 si scrive con due bit 10 per cui vuol dire che dobbiamo scrivere 0 e riportare 1 La stessa cosa succedeva in decimale se sommavamo ad esempio 8+5. Il risultato fa 13 che in decimale non si può scrivere con una sola cifra per cui dovevamo scrivere 3 e riportare 1


1 riporto

0

1

0

1

1

0

1

1

+

0

0

1

0

1

1

1

0

=

0

1


Sommiamo ora i bit in terza posizione più il riporto 0+1+1 di riporto =2 cioè in binario 10 per cui si scrive 0 e si riporta 1 1 riporto

0

1

0

1

1

0

1

1

+

0

0

1

0

1

1

1

0

=

0

0

1


Sommando le quarte cifre più il riporto si avrà 1+1+1=3 che è pari in binario a 11 per cui si scrive 1 e si riporta 1 1 riporto

0

1

0

1

1

0

1

1

+

0

0

1

0

1

1

1

0

=

1

0

0

1


Questo è il risultato finale

0

1

0

1

1

0

1

1

+

0

0

1

0

1

1

1

0

=

1

0

0

0

1

0

0

1


Il problema del overflow Se il computer ha una capacità limitata di rappresentare numeri cosa succede se svolge un’operazione che da’ un numero troppo grande come risultato? Supponendo di avere un computer con registri ad 8 bit, sappiamo che essi possono contenere numeri che vanno da 0 a 255


Il problema del overflow In un registro ci potrà essere ad esempio il numero 100 ed in un altro il numero 200 ma se li sommiamo il risultato è 300, un numero che non è esprimibile dal computer. Cosa succede allora? Non ci resta che imitare il modus operandi del computer e svolgere l’operazione


Convertendo abbiamo che 100(10) = 01100100(2) 200(10) = 11001000(2)


Cominciamo a sommare partendo da destra come faremmo in decimale 0+0=0

0

1

1

0

0

1

0

0

+

1

1

0

0

1

0

0

0

=

0


Passando alle seconde cifre 0+0=0

0

1

1

0

0

1

0

0

+

1

1

0

0

1

0

0

0

=

0

0


Passando alle cifre successive 1+0=1

0

1

1

0

0

1

0

0

+

1

1

0

0

1

0

0

0

=

1

0

1

1

0

0


Sommando le penultime cifre si avrà 1+1=2 che è pari in binario a 10 cioè si scrive con due cifre,per cui come facciamo in decimale si scrive 0 e si riporta 1 1 riporto

0

1

1

0

0

1

0

0

+

1

1

0

0

1

0

0

0

=

0

1

0

1

1

0

0


Sommando le ultime cifre più il riporto si avrà 1+0+1=2 che è pari in binario a 10 cioè si scrive con due cifre,per cui si scrive 0 e si riporta 1 1 riporto 0

1

1

0

0

1

0

0

+

1

1

0

0

1

0

0

0

=

0

0

1

0

1

1

0

0


overflow Il problema è che questo ulteriore bit di riporto non può essere registrato in alcun posto perché i registri non hanno un nono bit Data la natura non flessibile del computer questo ulteriore bit va semplicemente perso. Per il computer il risultato sarà 00101100(2) = 44(10)


Non è colpa del computer Il problema è che ha eseguito un’operazione che va al di là delle sue possiblità Si parla di overflow o straripamento proprio per rendere con un’immagine questa idea che il problema è l’incapacità del registro di contenere tutto il risultato come un fiume in piena non riesce a contenere tutta l’acqua


Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.