Convertitore di basi numeriche

Converte un numero tra binario, ottale, decimale, esadecimale e qualsiasi base da 2 a 36, con complemento a due e griglia di bit cliccabile.

Larghezza
Binario
Ottale
Decimale
Esadecimale
Base
Bit — clicca per invertire

larghezza 8 bit, 8 a uno

Cosa fa questo strumento

Lo stesso numero può essere scritto in molte basi, e i programmatori si spostano di continuo fra quattro di esse: binario perché è ciò che tiene l’hardware, esadecimale perché ne è un’abbreviazione leggibile, decimale perché è così che ragionano le persone, e ottale perché i permessi dei file e qualche sistema più datato lo usano ancora. Digita un valore in uno dei campi e gli altri seguono, insieme a un ulteriore campo impostabile su qualsiasi base da 2 a 36.

Ciò che lo distingue da una calcolatrice scolastica è il selettore di larghezza e la griglia di bit. Scegli 8, 16, 32 o 64 bit e i numeri negativi assumono la loro vera rappresentazione macchina invece di un segno meno, e ogni bit diventa qualcosa su cui puoi cliccare.

Cos’è davvero una base

Una base è quante cifre hai a disposizione prima di esaurirle e dover riportare. Il decimale ne ha dieci, quindi dopo il 9 viene il 10. Il binario ne ha due, quindi dopo l’1 viene il 10. La posizione di ogni cifra è una potenza della base, e tutto qui:

1011           # il numero, in base 2
1 x 8 = 8      # bit 3
0 x 4 = 0      # bit 2
1 x 2 = 2      # bit 1
1 x 1 = 1      # bit 0
8+0+2+1 = 11   # il totale, in decimale

Le basi sopra il dieci hanno bisogno di più di dieci simboli, e prendono quindi in prestito lettere: l’esadecimale va da 0-9 poi a-f, dove a vale 10 e f vale 15. Si prosegue fino alla base 36, che usa ogni cifra e ogni lettera — la base più grande scrivibile con l’alfabeto semplice, e il motivo per cui questo strumento si ferma lì.

Perché l’esadecimale, e non altro

L’esadecimale è diffuso per un motivo preciso: 16 è 2 elevato a 4, quindi esattamente una cifra hex copre esattamente quattro bit. Questo rende la conversione fra hex e binario una consultazione senza aritmetica — ogni cifra hex si espande nei suoi quattro bit, indipendentemente dalle cifre vicine.

d    e    a    d
1101 1110 1010 1101   # ogni cifra hex è un proprio nibble

L’ottale funziona allo stesso modo con tre bit per cifra, dato che 8 è 2 elevato a 3 — ed è per questo che i permessi Unix sono ottali: tre bit di permesso per gruppo di utenti entrano esattamente in una cifra. Il decimale non ha una relazione simile col binario, ed è per questo che convertire fra i due richiede una vera divisione anziché una consultazione.

È anche il motivo per cui qui il campo binario è raggruppato a quattro e quello hex a due: i gruppi coincidono con i confini che contano, così puoi leggere un nibble o un byte dallo schermo senza contare.

Numeri negativi e complemento a due

Un numero negativo non ha una forma binaria di per sé. In un registro non esiste il segno meno — solo bit — quindi il segno deve essere codificato nei bit stessi, e questo impone di decidere quanti bit ci sono. Ecco perché esiste il selettore di larghezza, ed ecco perché la risposta cambia quando lo cambi.

Lo schema che ogni macchina moderna usa è il complemento a due: per rappresentare un numero negativo si prende la sua forma positiva, si inverte ogni bit e si aggiunge uno. Il risultato è che il bit più alto finisce per significare «negativo», e l’addizione ordinaria continua a funzionare senza casi speciali per i segni.

0000 0101   # 5
1111 1010   # ogni bit invertito
1111 1011   # più uno: -5 come byte, o fb in hex

Allarga il registro e lo stesso numero riceve un motivo diverso: -5 è fb a 8 bit, fffb a 16 e fffffffb a 32. Il valore non è cambiato; è cambiato il numero di bit che lo portano. Cambiare larghezza in questo strumento mostra esattamente questo.

Perché 0xFF è insieme 255 e -1

I bit ff non dicono se sono con segno. Un byte che contiene 1111 1111 si legge 255 se il codice che lo carica ha dichiarato un tipo senza segno, e -1 se ne ha dichiarato uno con segno. Nulla nel byte stesso distingue i due casi — il tipo è un’affermazione che il programma fa su bit che non portano quell’informazione.

Da qui nasce un’intera famiglia di bug reali: un checksum che risulta negativo, un byte letto da un file che confronta come minore di zero, un char C che si comporta diversamente su ARM e su x86 perché la sua segnatura è definita dall’implementazione. Ogni volta che la lettura con segno e quella senza differiscono, questo strumento le mostra entrambe, perché la discrepanza è di solito proprio ciò che stavi cercando.

La griglia di bit

Ogni bit del valore corrente è mostrato con il suo numero di posizione, e cliccandolo si inverte. Le basi si aggiornano subito, il che rende alcune domande molto più facili che a mano:

  • Quale bit è attivo in questo valore di flag — cliccali e leggi le posizioni.
  • Qual è la maschera per i bit 4 e 7 — attiva quei due e leggi l’hex.
  • Cosa fa attivare il bit più alto a un valore con segno — lo rende negativo, in modo visibile.
  • Questo valore è una potenza di due — una potenza di due ha esattamente un bit attivo.

Il bit 0 è il meno significativo e sta a destra: è la convenzione universale e il motivo per cui la griglia resta da sinistra a destra anche su una pagina che si legge al contrario. Le righe sono di otto bit perché i confini dei byte si vedano a colpo d’occhio.

I numeri grandi restano esatti

I numeri JavaScript sono double, che tengono gli interi in modo esatto solo fino a 2^53 — circa 9 milioni di miliardi. Un valore a 64 bit può superarlo, e un convertitore costruito su numeri ordinari lo arrotonderà in silenzio, dando una stringa hex che sembra plausibile ed è sbagliata nelle ultime cifre.

Qui tutto usa interi a precisione arbitraria, quindi un valore a 64 bit completo si converte esattamente. La modalità a precisione arbitraria va oltre e rimuove del tutto il limite — utile per valori crittografici e identificatori grandi — ma nota che senza una larghezza fissa non c’è complemento a due, quindi in quella modalità un numero negativo porta semplicemente un segno meno in ogni base.

Da binario a decimale, e da decimale a binario

Binario e decimale sono qui l’unica coppia che non ha nulla in comune: due non è una potenza di dieci e dieci non è una potenza di due, quindi nessuno dei due versi è una consultazione ed entrambi richiedono aritmetica vera. E non è nemmeno la stessa aritmetica, che è la parte che si dice raramente: il metodo rapido a mano in un verso non è l’inverso del metodo rapido a mano al ritorno.

  • Da binario a decimale, raddoppiando: parti dal bit più a sinistra con zero e, per ogni bit, raddoppia quello che hai e aggiungi quel bit. Per 1011 viene 1, 2, 5, 11 — una sola passata, senza valori di posizione da ricordare, ed è esattamente ciò che fa questo strumento quando legge ciò che digiti.
  • Da binario a decimale, per posizioni: somma il valore di posizione di ogni bit attivo, che è l’esempio svolto più sopra. Più rapido quando sono attivi solo due o tre bit, più lento quando lo sono quasi tutti.
  • Da decimale a binario, dividendo: dividi per due e scrivi il resto, ancora e ancora, finché non rimane nulla; poi leggi i resti dal basso verso l’alto. La risposta arriva col bit meno significativo per primo, ed è per questo che sembra al rovescio per tutto il tempo in cui la scrivi.
  • Da decimale a binario, sottraendo: togli la più grande potenza di due che ci sta e ripeti. 200 perde 128 e restano 72; 72 perde 64 e restano 8; 8 perde 8 e non resta nulla — quindi sono attivi i bit nelle posizioni 7, 6 e 3 e il byte è 1100 1000. Più rapido della divisione ogni volta che i bit attivi sono pochi.

C’è una cosa che nessun metodo a mano copre qui: un numero decimale negativo non ha alcuna forma binaria finché non si sceglie una larghezza. Chiedi meno cinque in binario e la risposta onesta è un’altra domanda: quanti bit? È proprio ciò che risolve il selettore di larghezza, ed è l’argomento della sezione sul complemento a due più sopra. Nella modalità a precisione arbitraria non c’è larghezza, quindi il segno meno accompagna semplicemente il numero in ogni base.

Da decimale a esadecimale, e da esadecimale a decimale

Quasi nessuno che lo faccia spesso divide per sedici. La scorciatoia è la relazione dell’esadecimale col binario: converti il numero decimale in binario una volta, taglia i bit in gruppi di quattro partendo da destra e leggi ogni gruppo come una sola cifra hex. Il ritorno è lo stesso percorso al contrario: espandi ogni cifra hex nei suoi quattro bit e somma il valore di posizione di quelli attivi. Per tutto ciò che sta in un byte c’è una via ancora più breve: la prima cifra hex vale sedici volte la seconda, quindi basta moltiplicare e sommare.

  • 255 è ff — un byte con ogni bit attivo. È quello che conviene sapere a memoria, perché è lì che il byte si ferma.
  • 256 è 100. Un passo oltre un byte pieno le cifre scattano avanti, esattamente come 99 scatta a 100 in decimale, e il numero esadecimale guadagna una cifra che il byte non può contenere.
  • 65535 è ffff e 65536 è 10000: gli stessi due riferimenti un byte più in alto, dove si ferma un contatore a sedici bit.
  • 4096 è 1000, ed è per questo che dimensioni di pagina, allineamenti e scostamenti in memoria sembrano tondi in hex e sfrangiati in decimale. L’esadecimale conta a gruppi di quattro bit, e così fa anche l’hardware.

Maiuscole e minuscole non contano: FF e ff sono lo stesso valore, lo strumento accetta entrambe le scritture in ingresso e scrive minuscole in uscita. Ciò che non farà è indovinare. Il prefisso 0x appartiene al campo esadecimale e nel campo decimale viene rifiutato invece di essere scartato in silenzio, perché un valore letto nella base sbagliata è l’unico errore che un convertitore non deve mai far sembrare plausibile.

Da ottale a decimale, e lo zero iniziale che cambia la risposta

L’ottale sopravvive in un posto più che in ogni altro: i permessi dei file, dove tre bit di permesso per gruppo di utenti entrano esattamente in una cifra ottale. Convertirlo in decimale è normale aritmetica posizionale con potenze di otto — 755 in ottale è sette sessantaquattro più cinque otto più cinque, cioè 493 — e il verso opposto è una divisione per otto con i resti letti dal basso verso l’alto, la stessa forma di decimale a binario e per la stessa ragione: nemmeno otto ha una relazione con dieci.

  • 755 è 493 in decimale, 644 è 420 e 777 è 511. Nessuno di questi numeri decimali serve a qualcuno, ed è proprio il punto: i permessi si scrivono in ottale perché le cifre coincidono con i bit di permesso, non perché il valore conti qualcosa.
  • Uno zero iniziale è un segno di base in C e in Python 2: lì 0755 è ottale e vale quindi il numero 493. Python 3 rifiuta quella scrittura del tutto e vuole 0o755 al suo posto, cosa che ha eliminato un’intera famiglia di errori silenziosi.
  • Anche YAML 1.1 legge uno 0755 senza virgolette come 493 — ed è per questo che un modo di permessi in un file di configurazione va messo tra virgolette, altrimenti smette di essere il modo che hai scritto.
  • JSON non l’ha mai permesso: la sua grammatica vieta lo zero iniziale in un numero, quindi lì 0755 non è nemmeno un numero ma un errore di analisi — il più rumoroso dei tre comportamenti e il solo che non si possa leggere male.

Questo strumento non vede in uno zero iniziale il segno di nulla. La base la fissa il campo in cui digiti: 0755 nel campo decimale è 755 e nel campo ottale è 493, e il prefisso 0o è accettato nel campo ottale e rifiutato in ogni altro. Indovinare la base da un prefisso vorrebbe dire restituire un numero diverso da quello digitato.

Da ottale a esadecimale: la coppia senza scorciatoia

Sono entrambe potenze di due, quindi entrambe sono un puro raggruppamento degli stessi bit — e tuttavia questa è l’unica coppia fra le quattro basi senza alcuna regola cifra per cifra. Una cifra ottale è tre bit, una cifra hex è quattro, e nessuno dei due numeri divide l’altro, così i confini non coincidono mai. Non c’è modo di evitare di scrivere i bit e di raggrupparli di nuovo.

  • Scrivi ogni cifra ottale con i suoi tre bit, nell’ordine: 755 diventa 111 101 101.
  • Raggruppa quei bit a quattro a quattro dall’estremo destro, riempiendo a sinistra con zeri quando il conto non torna esatto: 0001 1110 1101.
  • Leggi ogni gruppo di quattro come una cifra hex: 1ed. Riempire dal lato sbagliato è qui l’errore classico, e non sembra un errore: moltiplica semplicemente la risposta, in silenzio.

Che due cifre hex siano esattamente un byte e due cifre ottali no è tutta la ragione per cui l’esadecimale ha soppiantato l’ottale nella lettura della memoria: otto bit sono due cifre ottali e due terzi, quindi il confine del byte cade in mezzo a una cifra. L’ottale si adattava a macchine la cui dimensione di parola era un multiplo di tre bit; l’esadecimale si adatta al byte da otto bit. E su questa pagina, per questa coppia, la griglia di bit è più rapida di entrambi i metodi a mano: attiva i bit una volta e i due campi stanno già mostrando la risposta.

Domande frequenti

Perché -5 appare come fb invece di -101 in binario?
Perché un registro non ha un segno meno. Con una larghezza selezionata, i negativi sono mostrati in complemento a due, che è ciò che la macchina immagazzina davvero: -5 in un byte è 1111 1011, cioè fb. Se vuoi la forma matematica con il segno, porta la larghezza su precisione arbitraria.
0xFF è 255 o -1?
Entrambi — i bit sono identici e decide solo il tipo dichiarato. Un valore a 8 bit con segno legge ff come -1; uno senza segno lo legge 255. Ogni volta che le due letture differiscono, lo strumento le mostra affiancate.
Perché si usa così tanto l’esadecimale invece del decimale?
Perché una cifra hex è esattamente quattro bit, quindi hex e binario si convertono per consultazione senza aritmetica e le cifre si allineano ai confini dei byte. Il decimale non ha questa relazione col binario, perciò un valore decimale non dice nulla su quali bit siano attivi.
Qual è la base più alta qui, e perché 36?
36, perché sono 10 cifre più 26 lettere — ogni simbolo che l’alfabeto latino semplice offre. Andare oltre richiederebbe una convenzione su quali caratteri aggiuntivi usare, e non ce n’è una condivisa.
Posso incollare un valore con 0x o con spazi?
Sì. I prefissi 0x, 0b e 0o sono accettati nella base corrispondente, e spazi e trattini bassi vengono ignorati, così puoi incollare direttamente da codice o da un datasheet senza ripulire prima.
Un valore a 64 bit si converte esattamente?
Sì. Tutta l’aritmetica usa interi a precisione arbitraria, quindi i valori oltre 2^53 — dove un normale numero JavaScript comincia ad arrotondare — restano esatti.
Qualcosa di ciò che digito viene inviato a un server?
No. È aritmetica nel tuo browser; nulla viene caricato o registrato, e funziona senza connessione di rete.
Come converto il binario in decimale a mano?
Raddoppia e somma, da sinistra: parti da zero e, per ogni bit, raddoppia quello che hai e aggiungi il bit. 1011 dà 1, poi 2, poi 5, poi 11. È una sola passata senza valori di posizione da ricordare, e lo stesso metodo funziona in qualsiasi base: moltiplica per la base invece di raddoppiare.
Quanto fa 255 in esadecimale, e perché questo numero salta fuori continuamente?
ff. È un byte con tutti gli otto bit attivi, cioè il valore più grande che un byte contiene e il punto in cui il conto scatta in un secondo byte — ed è per questo che compare in canali di colore, maschere e limiti di dimensione un po’ dappertutto. Uno in più è 256, scritto 100 in hex.
0755 è lo stesso numero di 755?
Qui sì nel campo decimale e no in quello ottale: la base la fissa il campo, e uno zero iniziale è soltanto una cifra zero. Altrove dipende dal linguaggio: C e Python 2 leggono 0755 come ottale, cioè 493; Python 3 rifiuta quella scrittura e vuole 0o755; YAML 1.1 la legge come 493; JSON la tratta come errore di sintassi.
Come converto l’ottale in esadecimale?
Passando per il binario, perché non esiste una via più breve: tre bit per cifra ottale, quattro per cifra hex, e i due non coincidono mai. Espandi ogni cifra ottale nei suoi tre bit, raggruppa tutta la sequenza a quattro a quattro partendo da destra e leggi ogni gruppo di quattro come una cifra hex: 755 diventa 111 101 101, poi 0001 1110 1101, poi 1ed.

Strumenti correlati

  • Convertitore di dimensioni dati

    Lo stesso numero letto come quantità di memoria invece che come schema di bit: quella pagina trasforma un conteggio di byte in KB, MB e GB accanto a KiB, MiB e GiB, e dice dove i due sistemi non vanno d’accordo.

  • Calcolatrice di percentuali

    Una base dice come si scrive un numero; una percentuale dice quanto vale accanto a un altro. Quella pagina risolve quote, variazioni e calcoli inversi, e stampa la formula con i tuoi numeri dentro.