# Fondamenti di informatica 1/Metodi di rappresentazione dei numeri binari

Fondamenti di informatica 1
Copertina Tutti i moduli · Sviluppo
* Introduzione
* Dati e informazioniFondamenti di informatica 1/Dati e informazioni
* Sistemi di numerazioneFondamenti di informatica 1/Sistemi di numerazione
* Metodi di rappresentazione dei numeri binariFondamenti di informatica 1/Metodi di rappresentazione dei numeri binari
* L'algebra di BooleFondamenti di informatica 1/L'algebra di Boole
* Le porte logicheFondamenti di informatica 1/Le porte logiche
* Le funzioni
* Gli algoritmi e i diagrammi di flusso
* Traduttori e compilatori
Modifica il sommario
I numeri binari, in campo informatico, non sono utilizzati esclusivamente per memorizzare numeri interi positivi: ma, mediante alcune convenzioni, è possibile scrivere numeri binari con segno e parte decimale usando solo i simboli "0" e "1".

## Rappresentazione in modulo e segno

Questo è il modo più semplice per rappresentare e distinguere numeri positivi e negativi: al numero binario vero e proprio viene anteposto un bit che, per convenzione, assume il valore 0 se il numero è positivo ed assume il valore 1 se il numero è negativo. Il grande difetto di questa rappresentazione è quello di avere due modi per scrivere il numero 0: 00000000 e 10000000 significano infatti +0 e -0.

## Rappresentazione in complemento a due

Questo metodo di rappresentazione ha notevoli vantaggi, soprattutto per effettuare somme e differenze: in pratica ai numeri viene anteposto un bit di valore zero; se poi il numero è negativo è necessario convertirlo in complemento a due: per farlo è sufficiente leggere il numero da destra verso sinistra e invertire tutte le cifre a partire dal primo bit uguale a 1 (escluso). Per fare un esempio:
$-12_{10}=-01100_{2}=10100_{CA2}$
Come è possibile notare seguendo questo metodo il primo bit diventa automaticamente il bit del segno (come per il metodo precedente). Viene però risolto il problema dell'ambiguità dello 0 (in complemento a 2 00000 e 10000 hanno significati diversi) e vengono enormemente facilitate le operazioni di somma e differenza, che si riducono alla sola operazione di somma: per spiegare meglio basta fare un esempio:
$5_{10}-10_{10}=5_{10}+(-10)_{10}=0101_{2}-1010_{2}=00101_{CA2}+10110_{CA2}=11011_{CA2}=-00101_{2}=-5_{10}$

## Rappresentazione in virgola mobile P754

Esistono innumerevoli modi per rappresentare numeri in virgola mobile ma il sistema più utilizzato è lo standard IEEE P754; questo metodo comporta l'utilizzo della notazione scientifica, in cui ogni numero è identificato dal segno, da una mantissa (1,xxxxx) e dall'esponente ($n^{yyyyy}$). La procedura standard per la conversione da numero decimale a numero binario P754 è la seguente:
* Prima di tutto il numero, in valore assoluto, va convertito in binario.
* Il numero va poi diviso (o moltiplicato) per 2 fino a ottenere una forma del tipo 1,xxxxxx.
* Di questo numero viene eliminato l'1 iniziale (per risparmiare memoria)
* Il numero di volte per cui il numero è stato diviso (o moltiplicato) per 2 rappresenta l'esponente: questo valore (decimale) va espresso in eccesso 127, ovvero è necessario sommare 127 e convertire il numero risultante in binario. Nel caso di rappresentazione a precisione doppia (v. definizione seguente) il valore dell'esponente viene espresso in eccesso 1023.
A questo punto abbiamo raccolto tutti i dati necessari per memorizzare il numero: in base al numero di bit che abbiamo a disposizione possiamo utilizzare tre formati: il formato a precisione singola (32 bit), il formato a precisione doppia (64 bit) e il formato a precisione quadrupla (128 bit).
* Nel primo caso possiamo scrivere il valore utilizzando 1 bit per il segno, 8 bit per l'esponente e 23 bit per la mantissa.
* Nel secondo caso servirà 1 bit per il segno, 11 bit per l'esponente e 52 per la mantissa.
* Nel terzo caso servirà 1 bit per il segno, 15 bit per l'esponente e 112 per la mantissa.
Per esempio, convertiamo il valore $-14,3125_{10}$ in binario P754 single:
* Convertiamo prima di tutto il numero: $14_{10}=1110_{2}$ per la parte intera e $0,3125_{10}=0,0101_{2}$. Quindi il numero definitivo è $1110,0101_{2}$ (segno escluso).
* Dividiamo poi il numero per 2 per ottenere la seguente notazione: $1110,0101_{2}=1,1100101_{2}*2^{3}$
* La mantissa diventa, quindi: 1100101.
* Per esprimere l'esponente in eccesso 127, infine: $127+3=130_{10}=10000010_{2}$
Il numero, alla fine, sarà espresso nel formato:
* addizione binaria
* 1+1=10