Calcolatrice esadecimale
Risultato
Esadecimale
- Decimale
- 10.842
- Binario
- 10101001011010
- Resto
- 0
Una calcolatrice esadecimale esegue le quattro operazioni — somma, sottrazione, moltiplicazione e divisione — su numeri scritti in base sedici, e mostra la risposta in esadecimale, in decimale e in binario. La base sedici usa sedici cifre: le dieci decimali più le lettere da A a F, dove A vale dieci, B undici, C dodici, D tredici, E quattordici e F quindici. Le lettere sono cifre a tutti gli effetti, non abbreviazioni, ed è questo il punto su cui si inciampa: leggere A come uno o come dieci cambia il risultato di un fattore dieci. L'aritmetica funziona colonna per colonna esattamente come in decimale, con la sola differenza che la colonna finisce dopo F invece che dopo 9: quindici più uno esaurisce le cifre e apre una colonna nuova, che è lo stesso evento di nove più uno in decimale, una base più avanti. La calcolatrice mostra tre letture perché ognuna serve a qualcosa: l'esadecimale è la forma in cui il valore è stato scritto, il decimale è quello che si può confrontare con i numeri di tutti i giorni, il binario è quello che dice quali bit sono accesi. Maiuscole e minuscole sono equivalenti in ingresso, la risposta esce sempre in maiuscolo e la divisione è intera, quindi il resto ha una riga tutta sua.
Formula
2A3F + 1B = 2A5A (10815 + 27 = 10842)
- 2A3F
- Il primo numero, scritto in base sedici. Le lettere sono cifre: A vale dieci, B undici, e così fino a F che vale quindici. Leggere A come qualcos'altro è l'errore che questa pagina esiste per evitare
- + − × ÷
- L'operazione. Si esegue colonna per colonna esattamente come l'aritmetica decimale, con il sedici al posto del dieci come base, quindi una colonna riporta quando supera la F
- F + 1 = 10
- La regola del riporto in questa base: quindici più uno esaurisce le cifre e apre una colonna nuova. È lo stesso evento di 9 + 1 = 10 in decimale, spostato di una base. Il 10 che si legge qui è quindi il numero sedici, non il dieci
- somma di cifra × 16ⁿ
- Come si produce la lettura decimale: ogni cifra moltiplicata per il valore della sua posizione e i risultati sommati. È così che 2A3F diventa 10.815, cioè 8192 più 2560 più 48 più 15
- 4 bit per cifra
- La ragione per cui questa base si usa. Una cifra esadecimale contiene esattamente quattro cifre binarie, quindi un byte sono esattamente due cifre esadecimali e non serve nessuna aritmetica per passare da una notazione all'altra: serve solo raggruppare
- resto
- Quello che avanza quando una divisione non viene esatta. La riga è sempre presente, e legge 0 per le tre operazioni che non possono lasciarne uno: uno zero lì significa che l'operazione non ha lasciato niente, non che la riga non sia stata riempita
- 53 bit
- Quanto può essere largo un ingresso accettato qui: fino a 9.007.199.254.740.991, che in questa base è 1FFFFFFFFFFFFF, cioè quattordici cifre. Oltre quella larghezza un numero di macchina non riesce più a distinguere i suoi vicini e l'aritmetica smetterebbe in silenzio di essere esatta
L'esadecimale è la lingua franca di tutto ciò che sta sotto il livello del codice, quindi questa pagina serve ogni volta che un valore va manipolato nella forma in cui è stato scritto invece che in quella in cui viene letto. Gli usi concreti sono gli indirizzi di memoria e gli offset, che si sommano e si sottraggono per calcolare dove si trova un campo dentro una struttura; le maschere di bit, dove l'esadecimale rende visibile quali nibble sono accesi e il binario no; i codici di errore e i valori di stato, che spesso si combinano con un OR prima di essere confrontati; e le impostazioni di protocollo, dove un campo lungo due byte si scrive come quattro cifre esadecimali. In tutti questi casi il numero non è una quantità astratta ma la descrizione di un pezzo di memoria, ed è per questo che la lettura binaria accanto alla risposta conta almeno quanto quella decimale: il binario dice quali bit sono accesi, il decimale dice quanto vale il numero, e le due cose rispondono a domande diverse. La pagina serve anche a chi vuole verificare a mano un valore che un compilatore, un debugger o un documento tecnico ha prodotto, e in quel caso è la lettura decimale a fare da controllo, perché è l'unica delle tre che si può confrontare con un numero conosciuto in anticipo.
Esempi svolti
Somma di 2A3F e 1B
- Allinea i due numeri a destra: 2A3F e 001B
- Colonna più a destra: F + B, cioè 15 + 11 = 26, che è 1A in esadecimale: scrivi A e riporta 1
- Colonna successiva: 3 + 1 + l'uno riportato = 5
- Colonna successiva: A + 0 = A
- Colonna più a sinistra: 2 + 0 = 2
- Il risultato è 2A5A, che in decimale è 10.842
L'esempio di apertura, e l'unico in cui il riporto si vede davvero: F più B supera la cifra più alta della base e apre una colonna, esattamente come 9 più 1 in decimale. Il controllo è nella lettura decimale: 10.815 più 27 fa 10.842, e il fatto che le due somme — quella in base sedici e quella in base dieci — diano lo stesso numero è ciò che rende la notazione una scrittura e non un'altra cosa. La lettura binaria, 10101001011010, sono quattordici bit che corrispondono alle quattro cifre esadecimali raggruppate quattro alla volta.
Divisione di 2A3F per 1B
- Questa è una divisione fra 10.815 e 27, quindi la risposta è 400 con 15 di resto
- Quattrocento in esadecimale è 190, e il quindici è F
- La pagina riporta il quoziente come 190 e il resto come F, invece di stampare una virgola
L'esempio che mostra perché la riga del resto esiste anche qui. In decimale il resto sarebbe un numero a due cifre, mentre qui è una lettera sola, e la differenza è una buona illustrazione del fatto che la base cambia la forma della risposta e non il suo valore. C'è anche una coincidenza che vale la pena notare: il quoziente 190 letto come decimale sarebbe centonovanta, mentre qui vale quattrocento, ed è di nuovo la trappola della notazione posizionale. La lettura decimale accanto alla risposta, 400, è l'unica delle tre che si può confrontare con un numero conosciuto in anticipo.
La stessa somma in minuscolo
- Le lettere minuscole sono le stesse cifre di quelle maiuscole: a vale dieci, b undici, e così via
- La somma è quindi identica a quella del primo esempio
- La risposta esce in maiuscolo, che è la convenzione adottata su tutto il sito
La tolleranza verso le minuscole è voluta, perché i due casi d'uso reali scrivono in modi diversi: gli indirizzi, le configurazioni e le stringhe di connessione usano il minuscolo, mentre i manuali, i datasheet e la documentazione tecnica usano quasi sempre il maiuscolo. Rifiutare una delle due grafie obbligherebbe a riscrivere a mano un valore appena copiato, che è anche il momento in cui si introducono gli errori di trascrizione. La risposta è normalizzata in maiuscolo perché due scritture diverse dello stesso valore non devono produrre due risposte che sembrano diverse.
Limiti
La calcolatrice accetta solo numeri interi in base sedici, con un segno meno opzionale e con le lettere indifferentemente in maiuscolo o in minuscolo. Non accetta spazi, prefissi come 0x, né un punto per una parte frazionaria, e non accetta numeri scritti in decimale: un ingresso come 19 viene letto come esadecimale, cioè come venticinque, e non come diciannove. Quest'ultima cosa è la fonte di errore più probabile per chi non ha familiarità con la base, perché il campo non ha modo di sapere quale notazione si intendesse. La divisione è intera, quindi il quoziente è troncato verso lo zero e il resto viene mostrato in una riga separata invece di comparire dietro una virgola; la divisione per zero viene rifiutata. Gli ingressi sono limitati a quattordici cifre esadecimali, cioè 1FFFFFFFFFFFFF, che in decimale è 9.007.199.254.740.991: oltre quella larghezza i numeri interi vicini non sono più distinguibili e l'aritmetica smetterebbe in silenzio di essere esatta, quindi un ingresso più lungo viene rifiutato. Il risultato ha lo stesso tetto, e anche una moltiplicazione che lo supera viene segnalata come errore invece di restituire un numero sbagliato. I numeri negativi si scrivono con un segno meno davanti e non in complemento a due, e non si presume nessuna larghezza di bit fissa: non c'è modo di chiedere che un risultato venga mostrato su quattro, otto o sedici bit con gli zeri a riempire davanti. La pagina non spiega la notazione esadecimale in sé e non contiene una tabella di corrispondenza fra caratteri e valori, perché quella tabella appartiene alle pagine di conversione di questa famiglia.
Domande frequenti
- Perché F + 1 fa 10 e non 16?
- Perché in base sedici non esiste una cifra singola per il sedici: le cifre disponibili finiscono a F, che vale quindici. Quindi quindici più uno esaurisce la colonna e ne apre una nuova, esattamente come nove più uno in decimale produce 10 e non un simbolo nuovo. Il 10 che si legge in questa base è quindi il numero sedici, non il dieci — ed è una distinzione che vale la pena ripetere, perché la scrittura è identica a quella decimale e il significato no. La regola del riporto è la stessa in tutte le basi: si riporta quando la somma di una colonna raggiunge la base.
- Che differenza c'è fra le lettere e i numeri?
- Nessuna, sono tutte cifre. La base sedici ha bisogno di sedici simboli e le cifre decimali sono soltanto dieci, quindi se ne aggiungono sei prendendole dall'alfabeto: A vale dieci, B undici, C dodici, D tredici, E quattordici e F quindici. In un calcolo si comportano come qualunque altra cifra e non c'è nessun caso particolare da ricordare, con l'unica accortezza di non leggerle come se fossero le prime lettere dell'alfabeto: A non è uno e non è undici, vale dieci. È la confusione più costosa di questa base, perché un A letto come uno cambia il risultato di un fattore dieci senza che nulla lo segnali.
- Cosa succede se scrivo un numero decimale nel campo?
- Viene letto come esadecimale, e il risultato è quindi diverso da quello che ti aspetti. Scrivere 19 non significa diciannove ma diciannove in base sedici, cioè 1 × 16 + 9 = 25. Il campo non ha modo di sapere quale notazione si intendesse, perché le cifre da 0 a 9 sono valide in tutte e due, e non esiste un prefisso che le distingua: 0x è una convenzione di scrittura dei linguaggi di programmazione e non fa parte del numero. L'unica regola affidabile è che tutto ciò che si digita qui è base sedici, e che per un valore decimale esiste una pagina di conversione separata.
- Posso scrivere le lettere in minuscolo?
- Sì, l'ingresso è indifferente alla distinzione fra maiuscole e minuscole: 2a3f e 2A3F sono lo stesso numero e danno la stessa risposta. La tolleranza è voluta, perché gli indirizzi e le configurazioni usano il minuscolo mentre la documentazione tecnica usa quasi sempre il maiuscolo, e rifiutare una grafia significherebbe obbligare a riscrivere a mano un valore appena copiato. La risposta esce sempre in maiuscolo, che è la convenzione adottata su tutto il sito, così due scritture dello stesso valore non producono due risultati che sembrano diversi.
- Perché la divisione non dà un numero con la virgola?
- Perché questa pagina lavora su numeri interi, quindi una divisione che non viene pari dà il quoziente troncato verso lo zero più il resto in una riga separata. Nel primo esempio del binario undici diviso due dà cinque con uno di resto, e qui 10.815 diviso 27 dà 400 con 15 di resto, che in esadecimale si scrive F. Il resto è una cifra della base in uso, quindi può essere una lettera, ed è una cosa a cui conviene fare caso quando si legge la riga: un resto F non è un errore di visualizzazione. La scelta di non usare la virgola è deliberata, perché una parte frazionaria può rendere il risultato non terminante.
- Perché la risposta compare in tre basi diverse?
- Perché ognuna risponde a una domanda diversa. L'esadecimale è la forma in cui il numero è stato scritto e quella in cui va confrontato con la documentazione; il decimale è l'unica che si può confrontare con i numeri di tutti i giorni e quindi l'unica che funziona da controllo; il binario mostra quali bit sono accesi, che è spesso la domanda vera quando il numero è una maschera di flag. Le tre letture descrivono lo stesso valore in tre notazioni, quindi non c'è niente da scegliere: si guarda quella che serve al momento. La lettura binaria in particolare è gratis, perché quattro bit corrispondono a una cifra esadecimale e la conversione è un raggruppamento e non un calcolo.
Riferimenti
- Hexadecimal — the base-sixteen system, the digits beyond nine, and the relationship between one hexadecimal digit and four binary digits — Wolfram MathWorld (United States)
- Number base — why a numeral's value depends on its position and on the base, and how the same quantity is written in different 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)