Convertitore da decimale a esadecimale
Risultato
Esadecimale
- Valori posizionali
- 2×4096 + 10×256 + 3×16 + 15
Un convertitore da decimale a esadecimale riscrive un numero con le sedici cifre che si usano per leggere il contenuto di una macchina, e lo fa con un metodo che si esegue a mano. Si divide il numero per sedici, si mette da parte il resto, e si continua a dividere il quoziente per sedici finché non arriva a zero. I resti letti dal basso verso l'alto sono i caratteri della risposta, con una sola avvertenza: i resti che superano il nove vanno sostituiti con le lettere, quindi il dieci diventa A, l'undici B, il dodici C, il tredici D, il quattordici E e il quindici F. È questa la parte in cui si sbaglia, ed è una svista particolare perché l'aritmetica è già stata fatta bene: chi divide correttamente e poi copia la colonna dei resti così com'è scrive 2103 al posto di 2A3F, e il numero che ottiene non ha niente a che vedere con quello di partenza. La ragione per cui si legge dal basso è la stessa della conversione in binario: ogni divisione trova la cifra meno significativa di ciò che resta, quindi i giri percorrono la risposta da destra a sinistra. La scala è anche molto più corta di quella binaria, perché il quoziente si riduce di circa sedici volte a ogni passaggio invece che di due: il più grande ingresso ammesso richiede quattordici righe, una per carattere.
La divisione di 10815 per sedici, un passaggio alla volta, finché il quoziente arriva a zero
| Passaggio | Divisione | Quoziente | Resto |
|---|---|---|---|
| 1 | 10815 ÷ 16 | 675 | 15 (F) |
| 2 | 675 ÷ 16 | 42 | 3 |
| 3 | 42 ÷ 16 | 2 | 10 (A) |
| 4 | 2 ÷ 16 | 0 | 2 |
Due dei quattro resti di questa scala sono scritti come un numero seguito dalla sua lettera fra parentesi — 15 (F) e 10 (A) — e quella doppia scrittura è la ragione per cui la tabella esiste. L'aritmetica dà 15; la risposta ha bisogno di F. Chi divide correttamente e poi copia la colonna dei resti così com'è scrive 2103 al posto di 2A3F, ed è l'unico errore che questa conversione invita a fare. Leggi la colonna dal basso verso l'alto e compaiono in ordine i caratteri della risposta: 2, 10, 3, 15, che è 2A3F una volta sostituiti i due valori sopra il nove. La tabella resta fissa su 10815 mentre il pannello qui sopra converte quello che hai digitato, perché mostra il metodo e non un risultato. Il quoziente cala di un fattore di circa sedici a ogni giro, quindi una scala anche per il più grande ingresso ammesso è lunga quattordici righe soltanto — che è esattamente la lunghezza del tetto in esadecimale, 1FFFFFFFFFFFFF.
Formula
10815 ÷ 16 = 675 r 15 → 675 ÷ 16 = 42 r 3 → 42 ÷ 16 = 2 r 10 → 2 ÷ 16 = 0 r 2 ⇒ 10815 = 2A3F = 2×4096 + 10×256 + 3×16 + 15
- 10815
- Il numero di partenza, scritto in decimale, cioè 10.815 nella scrittura italiana. È l'unica cosa che cambia da una conversione all'altra: il divisore e il metodo restano quelli qualunque sia il valore
- ÷ 16
- Il divisore, che è sedici perché la base di arrivo è sedici. Ogni giro produce un carattere della risposta, ed è per questo che la scala è così corta e che servono poche divisioni: il quoziente si riduce di circa sedici volte a ogni passaggio invece che di due
- quoziente
- La parte intera della divisione, cioè il numero che si porta al giro successivo. La scala si ferma quando arriva a zero, perché un quoziente nullo significa che sopra la posizione corrente non c'è più niente
- resto
- Quello che avanza, e qui può valere da zero a quindici, perché il divisore è sedici. È il punto in cui la conversione si distingue da quella binaria: il resto non è già un carattere, e i valori oltre il nove vanno tradotti in lettere prima di scrivere la risposta
- A — F
- Le sei lettere che continuano le cifre oltre il nove. Il dieci diventa A, l'undici B, il dodici C, il tredici D, il quattordici E e il quindici F. Trascurare questa sostituzione è l'errore tipico di questa pagina, ed è insidioso perché la divisione è stata fatta correttamente
- ⇒ 2A3F
- La risposta, ottenuta leggendo la colonna dei resti dal basso verso l'alto e sostituendo le lettere. La scala ne ha prodotti quattro, quindi la risposta ha quattro caratteri, che è anche il numero di giri eseguiti
- 2×4096 + 10×256 + 3×16 + 15
- La verifica, cioè la risposta riletta come somma di potenze di sedici. I valori delle lettere sono già stati sostituiti, quindi il termine del dieci e quello del quindici compaiono come numeri e non come A e F: è il controllo che si può fare a mente e che coglie sia una cifra persa sia una lettera non sostituita
L'esadecimale è la scrittura in cui il contenuto di una macchina viene effettivamente mostrato, quindi questa conversione si usa ogni volta che si passa da un numero che si conosce a un valore che bisogna cercare, confrontare o digitare. Un colore definito come 178 in un canale va scritto B2 nella pagina o nel foglio di stile; un permesso calcolato come 493 va cercato come 1ED fra i valori documentati; un indirizzo di memoria o un offset letto su un manuale va confrontato con quello che il debugger stampa. Il caso in cui è più utile è la lettura dei codici di errore e delle maschere: un codice come 0x2A3F non dice niente in decimale e si decodifica a vista in esadecimale, perché ogni carattere è quattro bit e quindi ogni carattere è un pezzo indipendente dell'informazione. Il caso opposto, convertire un esadecimale in decimale, è quello che si fa quando il valore va inserito in un contesto che accetta solo numeri, come un campo di un modulo o un argomento di un programma. La scala è anche il modo più breve di spiegare che cosa sia la notazione posizionale in una base diversa da dieci, perché le quattro colonne e i quattro caratteri della risposta si vedono contemporaneamente.
Esempi svolti
Scrivere 10815 in esadecimale
- 10815 ÷ 16 = 675, resto 15. Il quindici si scrive F
- 675 ÷ 16 = 42, resto 3. Il tre resta 3
- 42 ÷ 16 = 2, resto 10. Il dieci si scrive A
- 2 ÷ 16 = 0, resto 2. Il due resta 2
- Il quoziente è arrivato a zero, quindi il metodo si ferma
- Leggendo i resti dal basso verso l'alto e sostituendo le lettere si ottiene 2A3F
- Verifica: 2×4096 + 10×256 + 3×16 + 15 = 8192 + 2560 + 48 + 15 = 10815
I due resti che superano il nove sono il quindici del primo giro e il dieci del terzo, e sono i due punti in cui la risposta si allontana dalla colonna dei resti. Chi copiasse la colonna così com'è scriverebbe 2103, un numero che in decimale vale 8451 e che non ha nessun rapporto con quello di partenza. La verifica finale è la parte più utile dell'esempio, perché il termine del dieci e quello del quindici compaiono già sostituiti: se la somma ridà 10.815, allora anche la sostituzione è stata fatta bene, e in un colpo solo si controlla sia l'aritmetica sia la traduzione.
Un byte intero, 255
- 255 ÷ 16 = 15, resto 15. Il quindici si scrive F
- 15 ÷ 16 = 0, resto 15. Il quindici si scrive F
- Il quoziente è arrivato a zero, quindi il metodo si ferma
- Leggendo i resti dal basso verso l'alto si ottiene FF
255 è il valore più grande che sta in un byte e in esadecimale occupa esattamente due caratteri, che è il motivo per cui due cifre esadecimali sono la scrittura naturale di un byte: un canale di colore, un codice di carattere, un ottetto di un indirizzo IP. La scala qui ha solo due giri perché sedici al quadrato fa 256, quindi qualunque valore sotto il 256 si esaurisce in due caratteri. Entrambi i resti valgono quindici perché il numero è uno in meno di 256, ed è la stessa cosa che nella pagina del binario produce otto uno di fila.
Una potenza di sedici, 1048576
- 1048576 ÷ 16 = 65536, resto 0
- 65536 ÷ 16 = 4096, resto 0
- 4096 ÷ 16 = 256, resto 0
- 256 ÷ 16 = 16, resto 0
- 16 ÷ 16 = 1, resto 0
- 1 ÷ 16 = 0, resto 1
- Leggendo i resti dal basso verso l'alto si ottiene 100000
- La somma dei pesi è 1.048.576 da solo, perché una sola posizione è accesa
1.048.576 è sedici elevato alla quinta, quindi la risposta è un uno seguito da cinque zeri: una potenza della base dà sempre un uno e tanti zeri quante sono le unità dell'esponente, in qualunque base. Le cinque cifre della risposta sono anche il numero di giri, perché ogni giro produce un carattere, e il valore senza zeri finali — 1048576 — è la stessa cosa che si vede in esadecimale come 100000, cioè una potenza di sedici riconoscibile a vista. Riconoscere le potenze della base è utile perché sono i valori in cui la divisione dà sempre resto zero tranne che nell'ultimo passaggio.
Un numero negativo
- Il segno meno viene messo da parte e la conversione si applica al valore assoluto
- 10815 dà 2A3F come nel primo esempio
- Il segno torna davanti al risultato, quindi -2A3F
- La somma stampata porta il segno fuori dalla parentesi, perché vale per tutta la somma e non per il primo termine
Il segno non è una cifra esadecimale e non partecipa alla conversione, quindi resta fuori dai gruppi e fuori dalla somma. Vale la stessa avvertenza delle altre pagine di questa famiglia: non è il complemento a due, la rappresentazione che un processore usa quando memorizza un numero negativo in bit a larghezza fissa. In quella notazione un numero negativo non ha un segno davanti ma una configurazione di bit, e la sua scrittura esadecimale è una serie di F: è la forma che si incontra nei registri e nei debugger, e riconoscerla è utile, ma è una cosa diversa da quella che questa pagina produce.
Limiti
Il convertitore accetta un numero intero in decimale, con un segno meno opzionale e con eventuali zeri iniziali, e non accetta altro: niente punto o virgola per una parte frazionaria, niente spazi, e nessun separatore di migliaia — il valore va digitato come 9007199254740991 e non come 9.007.199.254.740.991, perché il campo legge solo cifre. Non accetta nemmeno un ingresso scritto direttamente in esadecimale: questo convertitore va in una sola direzione, e per l'altra esiste una pagina separata. La risposta è in maiuscolo e non c'è modo di chiederla in minuscolo, perché la distinzione è una convenzione di scrittura e non un valore diverso. Il numero massimo convertibile è 9.007.199.254.740.991, che in esadecimale è quattordici caratteri, cioè 1FFFFFFFFFFFFF; un ingresso più grande viene rifiutato con un messaggio invece di essere convertito, perché oltre quella larghezza i numeri interi vicini non sono più distinguibili e la risposta sembrerebbe esatta senza esserlo. Un numero negativo viene convertito nel suo valore assoluto e il risultato porta un segno meno davanti: la pagina non gestisce il complemento a due e non riconosce i valori scritti in quella notazione. La scala mostrata negli esempi è quella del numero dell'esempio e non cambia quando cambia l'ingresso: è la dimostrazione del metodo, non il calcolo della conversione in corso. Infine la pagina non spiega perché le lettere comincino da A invece di continuare con cifre nuove: dà per scontata la convenzione, e la tabella qui sotto è il posto in cui la corrispondenza fra resti e caratteri viene resa esplicita.
Domande frequenti
- Perché si divide per sedici e non per un altro numero?
- Perché sedici è la base di arrivo espressa in decimale: il divisore di una conversione è sempre la base in cui si vuole scrivere il numero. Dividendo per due si ottiene il binario, dividendo per sedici si ottiene l'esadecimale, e dividendo per otto si otterrebbe l'ottale. Il divisore determina anche quanti valori diversi può assumere il resto, e quindi che cosa bisogna fare con la colonna dei resti prima di scrivere la risposta: con il due i resti sono già cifre, con il sedici possono arrivare fino a quindici e i valori oltre il nove vanno tradotti in lettere.
- Cosa sono le lettere A, B, C, D, E e F?
- Sono le cifre esadecimali che continuano la numerazione oltre il nove, e servono perché la base sedici ha bisogno di sedici simboli mentre le cifre decimali sono soltanto dieci. Il dieci diventa A, l'undici B, il dodici C, il tredici D, il quattordici E e il quindici F. Non sono un codice da imparare a memoria: sono semplicemente i simboli successivi disponibili, e la scelta di usare le prime sei lettere dell'alfabeto è una convenzione, non una proprietà matematica. Un sistema diverso userebbe simboli diversi e scriverebbe gli stessi numeri.
- Perché i resti vanno letti dal basso verso l'alto?
- Perché ogni divisione trova la cifra meno significativa di quello che resta. Il primo giro divide il numero intero per sedici e il suo resto riguarda la posizione delle unità; il secondo lavora sul quoziente e riguarda la posizione del sedici; il terzo la posizione del 256. I giri percorrono quindi la risposta da destra a sinistra, e per rimetterla nell'ordine in cui si scrive bisogna rileggere la colonna al contrario. Leggendola dall'alto in basso si ottiene la risposta rovesciata, e il risultato è una sequenza esadecimale perfettamente valida che però vale un numero diverso.
- La scala quanto è lunga?
- Tanto quanto il numero di caratteri della risposta, perché ogni giro ne produce esattamente uno. Un byte richiede due giri, un valore intorno al milione ne richiede cinque o sei, e il più grande ingresso ammesso ne richiede quattordici: il quoziente si riduce di circa sedici volte a ogni passaggio, quindi la scala resta corta anche su numeri molto grandi, ed è questa la differenza più visibile rispetto alla conversione in binario, dove lo stesso numero richiede suddivisioni che si fermano solo dopo cinquanta passaggi. La lunghezza non si conosce in anticipo, ma è dell'ordine del logaritmo in base sedici del numero.
- Come faccio a controllare che la risposta sia giusta?
- Rileggendo la risposta come somma di potenze di sedici, che è il controllo stampato accanto al risultato. Si prendono i caratteri, si sostituiscono le lettere con i valori numerici corrispondenti, si moltiplica ciascuno per la potenza della sua posizione contata da destra a partire da zero e si somma. Per 2A3F si ottiene 2×4096 + 10×256 + 3×16 + 15 = 10.815. Il controllo è più utile di quello della conversione binaria, perché coglie in un colpo solo due errori diversi: una cifra persa leggendo la scala, che cambia la somma, e una lettera non sostituita, che nella somma non comparirebbe affatto.
- Perché la tabella mostra sempre 10815 anche se io ho digitato un altro numero?
- Perché mostra il metodo e non il risultato: la scala dei passaggi è la dimostrazione di come si converte, e per essere leggibile deve riferirsi a un numero concreto e noto. Il pannello qui sopra è ciò che risponde sul numero digitato, la tabella è ciò che spiega il procedimento una volta per tutte. Le due cose non sono in contraddizione quando i numeri non coincidono, ed è la stessa avvertenza che accompagna le tabelle delle altre pagine di questa famiglia: una tabella fissa accanto a un pannello che cambia è la norma, non un errore.
Riferimenti
- Hexadecimal — base sixteen, the letters A to F as the values ten to fifteen, and conversion to and from decimal — Wolfram MathWorld (United States)
- Number base — why a numeral's value depends on its position and on the base, and how one quantity is written in several bases — Wolfram MathWorld (United States)
- IEEE 754 — the double-precision format these calculations are carried out in, and the 53-bit significand that fixes this page's input ceiling — IEEE Standards Association (United States)
- Esadecimale — la numerazione in base sedici e le sedici cifre che le servono, lettere comprese — Treccani, Istituto della Enciclopedia Italiana (Italia)