In questa sezione tenterò di dare una spiegazione alla questione della conversione da numeri decimali a numeri in base 2 o in base 16. L’idea di base è che all’interno di un computer le informazioni maneggiate dal computer e le operazioni svolte da esso vengano codificate secondo numeri in base 2. Il lettore sicuramente si starà chiedendo perché. La ragione è che da sempre i processori, i circuiti, micro chip e quant’altro funzionano seguendo una logica di base molto semplice: quella dell’interruttore, del segnale che può passare o non può passare, del bit acceso oppure spento.
Questi sistemi vengono regolati da dei teoremi ovvero quelli dell’algebra booleana e tali regole permettono il funzionamento dei sistemi sopra citati. Perché tutto ciò? Perché non si usa la base 10? Per quanto possa sembrare contro intuitivo sarebbe stato ben più complesso da progettare un circuito o un processore che funzioni in base decimale. Come alcuni di voi avranno intuito, l’algebra booleana è perfetta per servire sistemi in cui abbiamo elementi che si accendono e si spengono e le cui combinazioni possono permettere di andare a svolgere le più svariate funzioni. Si immagini come dentro un processore ci siano milioni di piccoli interruttori che si accendono e si spengono molto rapidamente per andare a codificare istruzioni e informazioni.
Da qui la questione della conversione delle informazioni, in questo caso numeri decimali, in binario: il funzionamento è certamente non di facile comprensione a primo impatto ma partiamo con un esempio completo di varie casistiche di fronte a cui il lettore potrebbe trovarsi
25.347 come lo converto in binario a 32 bit single precision IEEE 754 (standard per numeri a virgola mobile)?
Per prima cosa ci si occupa della parte intera, ovvero 25 e si opera effettuando delle divisioni con il numero due come dividendo in cui tengo traccia di quelli che potremmo chiamare “resti” che ci serviranno per comporre il numero binario. Di seguito l’esecuzione:

(ci si ferma quando si arriva alla divisione 1 / 2. Leggiamo il risultato dal basso verso l’alto)
Così facendo si è ottenuto che $25_{(10)} = 11001(2)$
Ora si procede con la conversione della parte frazionaria → 0.347. In questo caso si prende la parte frazionaria e la si moltiplica per 2 fino a quando: arriviamo perfettamente ad 1 come risultato della parte frazionaria moltiplicata per due, oppure arriviamo a 23 operazioni svolte (dimensione massima, 23 bit, della mantissa).


Come potete osservare che cosa succede quando la moltiplicazione ci porta ad avere un valore che sia più grande di 1? Si segna il valore 1 e poi si porta la parte frazionaria nuova alla prossima iterazione. Il risultato finale è
$0.347_{10} = 0.0101 1000 1101 0100 1111 1101_{(2)}$
Mettendo insieme le due parti prima della normalizzazione otteniamo $1 1001.0101 1000 1101 0100 1111 1101$
A questo punto dobbiamo effettuare la normalizzazione, ovvero andare a portare questo numero ad una forma del tipo $1.QualsiasiValoreBinario$
Come si può svolgere questa operazione? E’ possibile andare a spostare la virgola di tante posizioni quante son quelle necessarie per arrivare ad avere la normalizzazione. In questo è necessario fare uno spostamento di 4 posizioni $1 1001.0101 1000 1101 0100 1111 1101 \times 2^{4} = 1. 1001 0101 1000 1101 0100 1111 1101$
A questo punto si è arrivati ad avere quasi tutti gli elementi utili per comporre il numero in standard IEEE 754. Come visto durante le lezioni questi numeri secondo lo standard son caratterizzati da 3 elementi: