Il sistema numerico binario è un sistema numerico posizionale in base 2, cioè che utilizza 2 simboli, tipicamente 0 e 1, invece dei 10 del sistema numerico decimale tradizionale. Di conseguenza, la cifra in posizione n (da destra) si considera moltiplicata per 2(n − 1) anziché per10(n − 1) come avviene nella numerazione decimale. Nella seguente tabella sono confrontate le rappresentazioni binarie, esadecimali e decimali di alcuni numeri: Il sistema numerico binario è usato in informatica per la rappresentazione interna dei numeri, grazie alla semplicità di realizzare fisicamente un elemento con due stati anziché un numero di stati superiore, ma anche per la corrispondenza con i valori logici di vero e falso. Il sistema numerico binario ha molti padri. Il primo a proporne l'uso fu Juan Caramuel con la pubblicazione del volume "Mathesis biceps. Vetus, et noua" (1669) pubblicata nella sua sede vescovile di Campagna in provincia di Salerno. Se ne trova traccia anche nelle opere diNepero. Successivamente, il matematico tedesco Gottfried Wilhelm Leibniz ne studiò per primo l'aritmetica. Questa è la ragione per cui questo sistema di numerazione è considerato tra le sue più grandi invenzioni. Però non ebbe un seguito immediato. L'aritmetica binaria venne ben presto dimenticata e riscoperta solo nel 1847 grazie al matematico inglese George Boole che aprirà l'orizzonte alle grandi scuole di logica matematica del '900 e soprattutto alla nascita del calcolatore elettronico. La formula per convertire un numero da binario a decimale (dove con d si indica la cifra di posizione n all'interno del numero, partendo da 0) è
d(n)2(n − 1) + d(n − 1)2(n − 2)... + d020 = N
Ad esempio 10012 = 1 * 23 + 0 * 22 + 0 * 21 + 1 * 20 = 910
Rappresentazioni di numeri binari
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 senza introdurre nuovi caratteri (come la virgola e il segno meno, non memorizzabili su di un byte).
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 unbit 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 2: 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: − 1210 = − 011002 = 10100CA2
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:
510 − 1010 = 510 + ( − 10)10 = 01012 − 10102 = 00101CA2 + 10110CA2 = 11011CA2 = − 001012 = − 510
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 (nyyyyy). 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.
1. Di questo numero viene eliminato l'1 iniziale (per risparmiare memoria)
2. 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).
1. Nel primo caso possiamo scrivere il valore utilizzando 1 bit per il segno, 8 bit per l'esponente e 23 bit per la mantissa.
2. Nel secondo caso servirà 1 bit per il segno, 11 bit per l'esponente e 52 per la mantissa.
3. 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,312510 in binario P754 single:
1. Convertiamo prima di tutto il numero: 1410 = 11102 per la parte intera e 0,312510 = 0,01012. indnumero definitivo è1110,01012 (segno escluso).
2. Dividiamo poi il numero per 2 per ottenere la seguente notazione: 1110,01012 = 1,11001012* 23
3. La mantissa diventa, quindi: 1100101.
4. Per esprimere l'esponente in eccesso 127, infine: 127 + 3 = 13010 = 100000102
Il numero, alla fine, sarà espresso nel formato:
1 10000010 11001010000000000000000