Come Convertire Numeri tra Basi Diverse: Binario, Ottale, Decimale, Hex
Convertire un numero tra basi diverse significa riscrivere lo stesso valore con un insieme diverso di cifre, per esempio passando da decimale a binario o a esadecimale. Il metodo più diretto per farlo a mano è la divisione ripetuta per la base di destinazione: si annota il resto a ogni passaggio e lo si legge dal basso verso l’alto una volta che il quoziente arriva a zero.
Cosa significa davvero una base numerica
Una base numerica (o radice, “radix” in inglese) stabilisce quante cifre uniche usa un sistema di numerazione posizionale. Il decimale, base 10, usa le dieci cifre da 0 a 9. Il binario, base 2, ne usa solo due, 0 e 1. L’ottale, base 8, usa le cifre da 0 a 7. L’esadecimale, base 16, esaurisce le cifre da 0 a 9 e prosegue con le lettere da A a F per rappresentare i valori da 10 a 15.
In un sistema posizionale ogni cifra vale per la propria posizione, elevata a potenza della base. Nel numero decimale 202, la cifra 2 più a sinistra occupa la posizione delle centinaia, quindi vale 2 × 10². La stessa logica regge in qualunque base: cambia solo il moltiplicatore a ogni posizione, e la base 10 non ha nulla di speciale se non essere quella a cui siamo abituati per contare con le dita.
Convertire il decimale 202 in binario, ottale ed esadecimale
Per passare dal decimale a un’altra base esistono due tecniche complementari. Per ottale ed esadecimale conviene il metodo divisione-resto: si divide il numero per la base di destinazione, si annota il resto, si continua a dividere il quoziente ottenuto finché non arriva a zero, poi si leggono i resti dal basso verso l’alto.
Prendiamo 202 e convertiamolo in ottale:
| Passaggio | Divisione | Quoziente | Resto |
|---|---|---|---|
| 1 | 202 ÷ 8 | 25 | 2 |
| 2 | 25 ÷ 8 | 3 | 1 |
| 3 | 3 ÷ 8 | 0 | 3 |
Leggendo i resti dal basso verso l’alto (3, 1, 2) si ottiene 312. Lo stesso procedimento in base 16:
| Passaggio | Divisione | Quoziente | Resto |
|---|---|---|---|
| 1 | 202 ÷ 16 | 12 | 10 (A) |
| 2 | 12 ÷ 16 | 0 | 12 (C) |
I resti letti dal basso verso l’alto danno CA: il resto 12 si scrive C e il resto 10 si scrive A, seguendo la corrispondenza esadecimale tra 10-15 e le lettere A-F.
Per il binario è spesso più rapido il metodo del valore posizionale: si cerca la potenza di 2 più grande che sta nel numero, la si sottrae e si ripete l’operazione sul resto. Le potenze di 2 fino a 202 sono 128, 64, 32, 16, 8, 4, 2 e 1.
202 − 128 = 74, quindi il bit da 128 è acceso. 74 − 64 = 10, quindi il bit da 64 è acceso. 10 non contiene né 32 né 16, quindi quei due bit restano spenti. 10 − 8 = 2, quindi il bit da 8 è acceso. 2 non contiene 4, quindi resta spento. 2 − 2 = 0, quindi il bit da 2 è acceso, e il bit da 1 resta spento perché non resta nulla da sottrarre.
Sommando le posizioni accese si ottiene la verifica: 128 + 64 + 8 + 2 = 202. Scrivendo un 1 dove il bit è acceso e uno 0 dove è spento, dalla potenza più alta alla più bassa, il risultato è 11001010.
Il numero 202, quindi, è 11001010 in binario, 312 in ottale e CA in esadecimale. Le tre scritture valgono esattamente 202: cambia solo il modo di rappresentarlo.
Leggere l’ottale e l’esadecimale a ritroso: il caso 755
Il percorso inverso, da un’altra base verso il decimale, capita spesso nella pratica quotidiana di chi lavora con i permessi dei file su Unix e Linux. Il comando chmod usa tre cifre ottali per indicare i permessi di proprietario, gruppo e altri utenti, e 755 è probabilmente la combinazione più comune (lettura, scrittura ed esecuzione per il proprietario, lettura ed esecuzione per gli altri due).
Per leggere 755 come decimale, si moltiplica ogni cifra per la potenza di 8 corrispondente alla sua posizione, partendo da destra con esponente zero:
7 × 8² + 5 × 8¹ + 5 × 8⁰ = 7 × 64 + 5 × 8 + 5 × 1 = 448 + 40 + 5 = 493
755 in ottale corrisponde quindi a 493 in decimale. Lo stesso valore convertito in binario è 111101101, e in esadecimale è 1ED.
Vale la pena conoscere la scorciatoia che collega ottale, esadecimale e binario direttamente, senza passare dal decimale: ogni cifra ottale corrisponde esattamente a un gruppo di 3 bit, e ogni cifra esadecimale corrisponde esattamente a un gruppo di 4 bit (un nibble). Per 755 basta convertire ogni cifra separatamente in blocchi di 3 bit: 7 diventa 111, il primo 5 diventa 101, il secondo 5 diventa di nuovo 101. Concatenando i tre blocchi si ottiene direttamente 111101101, identico al risultato ottenuto passando dal decimale. È anche il motivo per cui ottale ed esadecimale restano popolari in informatica: comprimono sequenze lunghe di bit in poche cifre leggibili, comode per indirizzi di memoria, codici colore come #RRGGBB e, appunto, i permessi Unix.
Prova con i tuoi numeri
Digita un valore in uno qualsiasi dei quattro campi, decimale, binario, ottale o esadecimale: gli altri tre si aggiornano all’istante mentre scrivi.
Errori comuni e casi particolari
Aspettarsi il complemento a due per i numeri negativi. Chi è abituato a come i linguaggi di programmazione rappresentano gli interi con segno in memoria si aspetta spesso che un numero negativo cambi forma radicalmente passando da una base all’altra. Questo strumento invece usa la rappresentazione segno-modulo: antepone semplicemente un segno meno alla grandezza convertita. Il decimale -18 diventa -10010 in binario, -22 in ottale e -12 in esadecimale. Non è il complemento a due: un -18 con segno su 8 bit in complemento a due sarebbe 11101110, un valore completamente diverso da -10010. Se il tuo caso d’uso richiede proprio il complemento a due, tipico quando si simula l’aritmetica hardware o si legge un dump di memoria, tienilo presente prima di riutilizzare l’output altrove.
Confondere il case delle lettere esadecimali. In fase di digitazione, a e f minuscole valgono esattamente come A e F maiuscole: il valore numerico non cambia. L’output è sempre normalizzato in maiuscolo, quindi vedrai sempre CA e mai ca, indipendentemente da come hai scritto l’input.
Ignorare gli zeri iniziali. Scrivere 0312 invece di 312 in ottale, o 00CA invece di CA in esadecimale, non cambia il valore rappresentato: gli zeri a sinistra sono ridondanti in qualsiasi sistema posizionale, esattamente come 007 e 7 sono lo stesso numero in decimale.
Superare il limite di precisione pratico. Il convertitore lavora con numeri interi entro l’intervallo sicuro di JavaScript, che arriva fino a circa 2^53 - 1, poco più di 9 quadrilioni. Per l’uso quotidiano non è quasi mai un problema, ma oltre quella soglia l’aritmetica in virgola mobile comincia a introdurre errori di arrotondamento, quindi per cifre davvero enormi serve una libreria dedicata ai numeri interi arbitrariamente grandi.
Aggiungere prefissi come 0x, 0b o 0o. Molti linguaggi di programmazione richiedono un prefisso per indicare la base di un letterale numerico nel codice sorgente, per esempio 0xFF per l’esadecimale o 0b1010 per il binario in JavaScript o Python. Questo strumento non li vuole: i campi si aspettano solo le cifre pure. Digitare 0xCA nel campo esadecimale invece di CA restituirà un errore o un risultato inatteso, perché il prefisso è una convenzione del linguaggio di programmazione, non parte della notazione numerica.
Domande frequenti
Cos’è esattamente una base numerica? È il numero di cifre uniche che un sistema posizionale usa per rappresentare i valori. Il decimale (base 10) usa 0-9, il binario (base 2) usa solo 0 e 1, l’ottale (base 8) usa 0-7, e l’esadecimale (base 16) aggiunge le lettere A-F per coprire i valori 10-15. Cambiare base non cambia il valore rappresentato, solo il modo di scriverlo.
Perché l’informatica usa così tanto l’esadecimale invece del decimale? Perché ogni cifra esadecimale corrisponde esattamente a 4 bit binari (un nibble), il che rende l’esadecimale un modo compatto e leggibile per scrivere valori binari lunghi. Due cifre esadecimali bastano per un intero byte: 0xFF invece di scrivere 11111111. Per questo compare così spesso in indirizzi di memoria, codici colore RGB e messaggi di errore a basso livello.
Come si converte un numero binario in decimale senza calcolatrice? Si moltiplica ogni bit per la potenza di 2 corrispondente alla sua posizione, partendo da destra con esponente zero, e si sommano i risultati. Per 1101: (1×8) + (1×4) + (0×2) + (1×1) = 8 + 4 + 0 + 1 = 13. Lo stesso principio, con la base corretta, funziona per convertire ottale o esadecimale in decimale.
Qual è il numero più grande che questo convertitore riesce a gestire correttamente? Lo strumento lavora entro l’intervallo di interi sicuri di JavaScript, che arriva fino a 2^53 - 1, circa 9 quadrilioni. È ampiamente sufficiente per qualsiasi conversione tipica di sviluppo o studio; oltre quella soglia servirebbe una libreria per numeri interi arbitrariamente grandi.
Il convertitore supporta i numeri negativi? Sì. Basta anteporre un segno meno al valore in uno qualsiasi dei quattro campi, ad esempio -18, e le altre tre basi mostreranno il rispettivo equivalente negativo in rappresentazione segno-modulo, non in complemento a due.
Posso condividere un link con i valori già inseriti? Sì. L’URL si aggiorna automaticamente mentre digiti nella pagina completa dello strumento, quindi puoi copiarlo dalla barra degli indirizzi o usare il pulsante Condividi: chi apre il link vede subito i tuoi valori già calcolati.