Convertitore base numerica
Converti tra binario, ottale, decimale ed esadecimale.
Capire le basi numeriche
Una base numerica (o radix) determina quante cifre uniche servono per rappresentare i numeri. La più familiare è la base 10 (decimale), che usa le cifre 0-9. I computer usano nativamente la base 2 (binario), con solo 0 e 1.
- Binario (base 2): usato internamente da tutti i sistemi digitali. Ogni cifra è un «bit».
- Ottale (base 8): usa le cifre 0-7. Comune per i permessi dei file Unix (per es. chmod 755).
- Decimale (base 10): il sistema numerico standard umano.
- Esadecimale (base 16): usa 0-9 e A-F. Molto utilizzato per i colori (#FF0000), gli indirizzi di memoria e la rappresentazione di byte.
Domande frequenti
Supporta numeri molto grandi?
Sì. Questo strumento usa BigInt di JavaScript, che supporta interi arbitrariamente grandi senza perdita di precisione. Puoi convertire numeri di centinaia di cifre.
Perché il binario è importante in informatica?
I computer usano segnali elettrici a due stati (on/off), che corrispondono naturalmente al binario (1/0). Tutti i dati · testo, immagine, video · vengono in definitiva memorizzati ed elaborati in binario.
Come funziona la notazione posizionale
Un sistema numerico posizionale rappresenta un numero usando un insieme di dimensione fissa di simboli di cifre, dove la posizione di ogni cifra ne determina il peso. Il peso della posizione i (contata da destra, partendo da zero) è base^i. Il valore del numero è la somma di digit × base^i su tutte le posizioni. La stringa 352 in base 10 significa 3×100 + 5×10 + 2×1 = 352. La stringa 1011 in base 2 significa 1×8 + 0×4 + 1×2 + 1×1 = 11 in decimale.
La notazione posizionale è una delle due grandi invenzioni nella rappresentazione dei numeri. L'altra è quella non posizionale (numeri romani, ieratico egizio), dove i simboli hanno valori fissi indipendentemente dalla posizione. I sistemi posizionali comprimono; quelli non posizionali no, il numero 1.888 occupa quattro cifre in decimale ma otto caratteri in romano: MDCCCLXXXVIII.
Una breve storia delle basi
I Babilonesi usavano un sistema posizionale in base 60 (sessagesimale) almeno già nel periodo paleo-babilonese, intorno al 1900-1600 a.C. Le tavolette cuneiformi di quell'epoca usano già la notazione posizionale. Perché 60? Ha un numero straordinariamente alto di piccoli divisori (1, 2, 3, 4, 5, 6, 10, 12, 15, 20, 30, 60), il che rendeva più facile l'aritmetica delle frazioni in un mondo privo di frazioni decimali. L'eredità babilonese è ancora nella tua tasca: il tempo (60 secondi in un minuto, 60 minuti in un'ora) e gli angoli / le coordinate geografiche (360 gradi in un cerchio, 60 minuti d'arco per grado, 60 secondi d'arco per minuto) ne sono diretti discendenti. Quando leggi un orologio o una latitudine, stai leggendo in sessagesimale.
Il sistema posizionale decimale come lo conosciamo fu sviluppato dai matematici indiani nei primi secoli d.C. Il salto concettuale che lo distingue dalle precedenti tavole di calcolo è un simbolo scritto per lo zero che funge da segnaposto. Il primo uso inequivocabile dello zero in un contesto posizionale è generalmente attribuito a Brahmagupta (628 d.C.), il cui trattato Brāhmasphuṭasiddhānta diede le regole per l'aritmetica con lo zero. Il manoscritto di Bakhshali mostra un uso ancora precedente di un punto (bindu) come segnaposto.
Il sistema decimale viaggiò dall'India al mondo islamico nell'VIII-IX secolo, il poliedrico persiano al-Khwārizmī scrisse Il calcolo con i numeri indiani intorno all'825 d.C. («algoritmo» e «algebra» sono diretti discendenti etimologici del suo nome e dei titoli dei suoi libri). L'Europa rimase indietro. Leonardo da Pisa, noto come Fibonacci, introdusse formalmente i numeri indo-arabici nell'Europa latina nel Liber Abaci (1202), dimostrandone la superiorità sui numeri romani. I numeri romani sopravvissero nella contabilità europea fino al XVI secolo.
Gottfried Wilhelm Leibniz descrisse un sistema numerico interamente binario nel suo articolo del 1703 Explication de l'arithmétique binaire: anche se la sua motivazione principale era filosofica (la corrispondenza con l'I Ching) più che pratica. Il salto verso l'informatica binaria arrivò con la tesi di master del 1937 di Claude Shannon al MIT, «A Symbolic Analysis of Relay and Switching Circuits», che mostrò come l'algebra booleana potesse modellare le reti di relè elettrici, rendendo il binario il linguaggio naturale della logica digitale.
Gli algoritmi di conversione
Da decimale ad altra base, divisione ripetuta. Per convertire un intero decimale N in base b, dividi N per b, annota il resto, sostituisci N con il quoziente e ripeti finché il quoziente non è 0. I resti letti dal basso verso l'alto sono le cifre in base b. Esempio svolto per 156 in binario: 156÷2 = 78 r0, 78÷2 = 39 r0, 39÷2 = 19 r1, 19÷2 = 9 r1, 9÷2 = 4 r1, 4÷2 = 2 r0, 2÷2 = 1 r0, 1÷2 = 0 r1, leggendo i resti dal basso: 10011100. Verifica: 128 + 16 + 8 + 4 = 156.
Da altra base a decimale, metodo di Horner. Parti da 0; per ogni cifra da sinistra a destra, moltiplica il totale corrente per la base e aggiungi la nuova cifra. Esempio svolto per l'esadecimale 1F4: 0×16 + 1 = 1, poi 1×16 + 15 = 31, poi 31×16 + 4 = 500.
Entrambi gli algoritmi vengono eseguiti in tempo lineare rispetto al numero di cifre, e il BigInt di JavaScript li implementa dietro le quinte, motivo per cui questo strumento non ha un tetto di precisione. Un numero di 200 cifre si converte in modo pulito tra due basi qualsiasi senza perdita di arrotondamento, allo stesso modo in cui farebbe una calcolatrice con aritmetica intera a precisione arbitraria.
Le quattro basi che contano nell'informatica
- Binario (base 2): i transistor sono accesi o spenti, quindi il binario è la rappresentazione naturale per la logica digitale. Ogni dato, in definitiva, è binario.
- Ottale (base 8): storicamente comune nell'informatica delle origini perché 3 cifre binarie corrispondono in modo pulito a 1 cifra ottale. Meno presente oggi ma ancora usato nei permessi dei file Unix (
chmod 755) e in alcuni formati di file legacy. - Decimale (base 10): il sistema numerico umano di tutti i giorni, quasi certamente perché abbiamo dieci dita. Usato dai sistemi finanziari, dalla scienza, ovunque gli esseri umani leggano numeri.
- Esadecimale (base 16): esattamente 4 bit per cifra, il che significa 1 byte = 2 caratteri esadecimali. Lo standard di fatto per la rappresentazione compatta a livello di byte: codici colore esadecimali (
#FF0000), indirizzi di memoria (0x7fff...), punti di codice Unicode (U+1F600), indirizzi MAC, digest di hash.
Potenze di 2 da memorizzare
| Potenza | Decimale | Esadecimale | Perché è importante |
|---|---|---|---|
| 2⁸ | 256 | 0x100 | Un byte; valore massimo di un canale a 8 bit (RGB) |
| 2¹⁰ | 1,024 | 0x400 | «1K» nel contesto informatico |
| 2¹⁶ | 65,536 | 0x10000 | Dimensione del BMP di UTF-16; massimo intero a 16 bit |
| 2²⁰ | 1,048,576 | 0x100000 | «1M» nel contesto informatico |
| 2²⁴ | 16,777,216 | 0x1000000 | RGB a 24 bit («16,7 milioni di colori») |
| 2³² | ~4,3 miliardi | 0x100000000 | Massimo intero senza segno a 32 bit; spazio degli indirizzi IPv4 |
| 2⁶⁴ | ~1.8×10¹⁹ | 0x100… | Massimo intero a 64 bit; ben oltre la precisione in virgola mobile |
Quando ricorreresti a un convertitore di base
- Leggere i dump esadecimali da un debugger, da una cattura di pacchetti di rete o da un file binario. Tradurre
0xFFin 255 a mente va bene;0x7F4Adi solito no. - Codici colore CSS:
#FF0000è decimale (255, 0, 0). La conversione da esadecimale a RGB è esattamente base 16 → base 10 su ogni coppia di due caratteri. - Permessi dei file Unix:
chmod 755è ottale: 7 = rwx (lettura+scrittura+esecuzione = 4+2+1), 5 = r-x (lettura+esecuzione = 4+1), di nuovo 5. Ogni cifra ottale è esattamente 3 bit binari. - Ottetti IPv4: indirizzi come
192.168.1.1sono quattro numeri a 8 bit. Le maschere di sottorete sono più facili da ragionare in binario (una maschera/24è composta da 24 uni seguiti da 8 zeri). - Punti di codice Unicode: i caratteri sono catalogati in esadecimale (U+2665 per ♥, U+1F600 per 😀). Esistono gli equivalenti decimali ma la forma esadecimale corrisponde alle tabelle Unicode.
- Aritmetica delle maschere di bit: i flag delle funzionalità, i bit di permesso, i valori dei registri hardware sono tutti più facili da leggere in binario o esadecimale che in decimale.
- Debug di assembly o di codice disassemblato: indirizzi, opcode e valori immediati sono convenzionalmente scritti in esadecimale.
Altre basi da conoscere
- Base 36: la base più alta che entra negli alfanumerici senza caratteri speciali (10 cifre + 26 lettere). Usata per gli hash di URL brevi e alcuni schemi di codifica. Il
Number.toString(36)di JavaScript la espone direttamente. - Base 58: usata negli indirizzi Bitcoin e Ripple. Salta i caratteri facilmente confondibili
0(zero),O(O maiuscola),I(I maiuscola) el(L minuscola) così che gli indirizzi siano robusti agli errori di trascrizione a mano. - Base 62: alfanumerico completo (cifre + minuscole + maiuscole). Comune negli slug degli accorciatori di URL (l'«abc123» in
example.com/abc123). - Base 64: codifica i dati binari come ASCII stampabile per il trasporto su canali di solo testo (email, JSON, URL). Ambito diverso da questo strumento, opera su flussi di byte anziché su interi.
Convenzioni dei prefissi nel codice sorgente
La maggior parte dei linguaggi moderni usa lo stesso insieme di prefissi letterali per disambiguare la base nel codice sorgente:
- Binario:
0bo0B(Python, Ruby, Java dalla 7, C++ da C++14, JavaScript da ES6, Rust). Esempio:0b10011100. - Ottale:
0oo0O(Python 3, ES6, Rust). I linguaggi più vecchi della famiglia C usano uno zero iniziale (0755), che è occasionalmente un'insidia se per sbaglio riempi un decimale con uno zero. - Esadecimale:
0xo0X: universalmente compreso praticamente in ogni linguaggio di programmazione. - Decimale: nessun prefisso necessario.
Altre domande
E i numeri negativi?
I computer rappresentano gli interi negativi usando il complemento a due: inverti tutti i bit e aggiungi 1. Così, nel complemento a due a 8 bit, −1 è 11111111 (0xFF), −5 è 11111011 (0xFB) e −128 è 10000000 (0x80). Il bit più significativo indica il segno. Questo strumento mostra gli interi negativi con un segno meno iniziale anziché con una rappresentazione in complemento a due, perché quest'ultima ha senso solo a una larghezza di bit fissa, e dato che lo strumento usa il BigInt a precisione arbitraria, non c'è una larghezza fissa rispetto a cui interpretarla.
Perché l'esadecimale usa le lettere A-F?
Perché la base 16 ha bisogno di 16 simboli di cifra distinti e le cifre decimali 0-9 ne forniscono solo dieci. La convenzione di usare A-F (senza distinzione tra maiuscole e minuscole) per 10-15 fu resa popolare da IBM System/360 negli anni '60 e standardizzata in tutto il settore. I sistemi precedenti sperimentarono altri glifi (il G-15 di Bendix usava u, v, w, x, y, z) ma A-F prevalse.
Questo strumento può gestire le frazioni?
No, funziona solo con gli interi. La conversione di base frazionaria è più complessa perché la maggior parte delle frazioni decimali non ha una rappresentazione esatta in binario (il famoso problema della virgola mobile 0.1 + 0.2 ≠ 0.3). Per l'ispezione a livello di bit della virgola mobile, un visualizzatore IEEE 754 dedicato è lo strumento giusto.
Viene inviato qualcosa a un server?
No. Le conversioni vengono eseguite nel tuo browser usando l'aritmetica nativa BigInt di JavaScript. Nulla del tuo input lascia la pagina; lo strumento funziona offline una volta caricato.