L'esadecimale, comunemente abbreviato come esadecimale, è un sistema numerico posizionale che rappresenta valori numerici utilizzando una base di 16. Secondo la convenzione prevalente, le cifre da "0" a "9" vengono utilizzate per i valori da 0 a 9, analogamente al sistema decimale, mentre le lettere da "A" a "F" (senza distinzione tra maiuscole e minuscole) rappresentano valori decimali da 10 a 15.
Esadecimale (hex in breve) è un sistema numerico posizionale per rappresentare un valore numerico su base 16. Per convenzione più comune, una cifra è rappresentata da "0" a "9" come per i decimali e come una lettera dell'alfabeto da "A" a "F" (maiuscola o minuscola) per le cifre con valore decimale da 10 a 15.
Data la natura binaria intrinseca del computer hardware e lo stato esadecimale come potenza di due, la rappresentazione esadecimale viene spesso utilizzata nell'informatica per fornire una codifica compatta dei dati binari. Ogni cifra esadecimale corrisponde a quattro bit contigui, un'unità comunemente chiamata nibble. Di conseguenza, un byte da 8 bit viene espresso utilizzando due cifre esadecimali, ad esempio 2C.
Notazioni specifiche vengono comunemente adottate per indicare che un numero è rappresentato in esadecimale. Nei contesti matematici, un pedice denota tipicamente la base; ad esempio, il valore decimale 491 verrebbe reso come 1EB16 in esadecimale. Nel campo della programmazione informatica esistono diverse convenzioni di notazione. Ad esempio, il C e numerosi linguaggi derivati utilizzano il prefisso 0x, come illustrato da 0x1EB.
Convenzioni per la rappresentanza scritta
Convenzione standard
In genere, le convenzioni di rappresentazione esadecimale consentono l'uso di lettere maiuscole o minuscole, trattandole come equivalenti indipendentemente dal loro caso.
Quando vengono visualizzati dati non testuali, i valori archiviati in memoria vengono spesso presentati come una sequenza di cifre esadecimali, spesso separate da spazi. Ad esempio, in un tipico dump esadecimale, ogni byte a 8 bit è rappresentato da un numero esadecimale a due cifre, delimitato da spazi, mentre l'offset iniziale a 32 bit viene visualizzato come un numero esadecimale a otto cifre.
Identificazione notazionale
Esistono più convenzioni per indicare esplicitamente che un valore numerico è espresso in esadecimale.
- La base può essere specificata esplicitamente utilizzando un pedice decimale; per esempio, 15910 indica 159 decimale, mentre 15916 indica 159 esadecimale. In alternativa, alcuni preferiscono pedici testuali, come 159decimal e 159hex, o le forme abbreviate 159d e 159h.
- In C e in numerosi linguaggi da esso derivati, il prefisso
0xindica che il letterale numerico successivo è esadecimale. Un carattere all'interno di una stringa o un carattere letterale può essere espresso in esadecimale utilizzando il prefisso\x(ad esempio,'\x1B'denota il carattere di controllo Esc). Inoltre, per emettere un numero intero in esadecimale tramite una funzione simile a printf, vengono utilizzati i codici di conversione del formato%Xo%x.
- All'interno degli Uniform Resource Identifier (URI), inclusi gli Uniform Resource Locator (URL), i codici dei caratteri sono rappresentati come coppie esadecimali precedute da
%. Ad esempio, inexample.com/name%20with%20spaces,%20indica il carattere spazio, che corrisponde al punto di codice ASCII 20 in esadecimale o 32 in decimale.
- In XML e XHTML, i caratteri possono essere espressi come riferimenti a caratteri numerici esadecimali utilizzando la notazione
ode;. Ad esempio,Trappresenta il carattere U+0054 (la lettera maiuscola "T"). Sexviene omesso, il numero viene interpretato come decimale (di conseguenza,Tsi riferisce al carattere identico).
- Nei linguaggi assembly derivati da Intel e Modula-2, i valori esadecimali sono indicati da un suffisso H o h, come visto in
FFho05A3H. Alcune implementazioni richiedono uno zero iniziale quando la cifra esadecimale iniziale non è una cifra decimale, richiedendo0FFhinvece diFFh. Anche altre implementazioni, come NASM, supportano la notazione esadecimale in stile C (ad esempio,0x42).
- Al contrario, vari altri linguaggi assembly (ad esempio 6502, Motorola), insieme a Pascal, Delphi, alcuni dialetti BASIC (ad esempio Commodore), GameMaker Language, Godot e Forth, utilizzano
$come prefisso per valori esadecimali, esemplificati da$5A3e$C1F27ED.
- Alcuni linguaggi assembly, come quelli per i microcontrollori Microchip, utilizzano la notazione
H'ABCD'per rappresentare valori esadecimali (equivalenti a ABCD16). Fortran 95 utilizza in modo simile Z'ABCD' per questo scopo.
- Ada e VHDL incapsulano i numeri esadecimali all'interno di 'virgolette numeriche', come dimostrato da
16#5A3#e16#C1F27ED#. Nello specifico, per le costanti vettoriali di bit, VHDL adotta la notazionex"5A3"ex"C1F27ED".
- Verilog esprime costanti esadecimali utilizzando il formato
8'hFF, dove '8' indica il numero di bit nel valore e 'FF' rappresenta la costante esadecimale stessa.
- I linguaggi di programmazione Icon e Smalltalk utilizzano il prefisso
16rper valori esadecimali, come esemplificato da16r5A3.
- PostScript, insieme alla Bourne Shell e ai suoi vari derivati, indica valori esadecimali utilizzando il prefisso
16#, come16#5A3e16#C1F27ED.
- Common Lisp utilizza i prefissi
#xe#16rper la rappresentazione esadecimale. Inoltre, la configurazione delle variabili *read-base* e *print-base* su 16 consente al lettore e alla stampante di un sistema Common Lisp di operare in modalità esadecimale sia per l'input che per l'output. Di conseguenza, i numeri esadecimali possono essere espressi senza il prefisso esplicito #x o #16r quando la base I/O del sistema è stata impostata su 16.
- In MSX BASIC, QuickBASIC, FreeBASIC e Visual Basic, i numeri esadecimali hanno il prefisso
&H, come esemplificato da&H5A3.
- BBC BASIC e Locomotive BASIC utilizzano
&come prefisso per i valori esadecimali.
- Le calcolatrici della serie TI-89 e TI-92 utilizzano un prefisso
0hper i numeri esadecimali, come0h5A3e0hC1F27ED.
- ALGOL 68 designa i numeri esadecimali con il prefisso
16r, illustrato da esempi come16r5a3e16rC1F27ED. Questa convenzione si estende anche alla specificazione di numeri binari, quaternari (base 4) e ottali.
- Sui mainframe IBM (zSeries) e sui computer di fascia media (IBM i) che operano con ambienti operativi tradizionali (zOS, zVSE, zVM, TPF, IBM i), il formato esadecimale predominante è
X'5A3'oX'C1F27ED'. Questa notazione è ampiamente applicata in Assembler, PL/I, COBOL, JCL, script, comandi e vari altri contesti. Storicamente, questo formato era prevalente anche su altri sistemi IBM, ormai obsoleti. In alcuni casi, le virgolette servivano come alternativa agli apostrofi.
- Nella sua pubblicazione The TeXbook, Donald Knuth ha utilizzato un carattere tipografico a macchina per riprodurre valori esadecimali, come 5A3 e C1F27ED.
Rappresentazione implicita
In determinati contesti, i numeri sono intrinsecamente considerati esadecimali, ovviando così alla necessità di una notazione di identificazione esplicita.
- Lo standard Unicode rappresenta i valori dei caratteri anteponendo al valore esadecimale
U+; ad esempio,U+00A1denota il punto esclamativo invertito (¡).
- I riferimenti ai colori nei sistemi HTML, CSS e X Window possono essere specificati utilizzando sei cifre esadecimali, con due cifre allocate per ciascuno dei componenti rosso, verde e blu, in quella sequenza, e preceduti da
#. Ad esempio, magenta è rappresentato come#FF00FF. I CSS supportano inoltre le abbreviazioni a 3 cifre esadecimali, dove ciascuna cifra corrisponde a un componente di colore; quindi,#FA3funge da abbreviazione per#FFAA33, che rappresenta un'arancia dorata.
- All'interno della codifica quoted-printable MIME (estensioni e-mail), i codici carattere vengono resi come coppie esadecimali precedute da
=. Ad esempio,Espa=F1asi traduce in "España" (dove F1hex indica il codice per ñ nel set di caratteri ISO/IEC 8859-1).
- I dati binari PostScript, inclusi i pixel dell'immagine, possono essere rappresentati come coppie esadecimali consecutive senza prefisso, come dimostrato da
AA213FD51B3801043FBC. - Un indirizzo IPv6 è composto da otto gruppi, ciascuno contenente quattro cifre esadecimali (spesso chiamate hextet), con due punti (
:) che separano questi gruppi. Ad esempio,2001:0db8:85a3:0000:0000:8a2e:0370:7334costituisce un indirizzo IPv6 valido, che può essere abbreviato omettendo gli zeri iniziali per diventare2001:db8:85a3::8a2e:370:7334. (Al contrario, gli indirizzi IPv4 sono generalmente espressi in formato decimale.)
- Gli identificatori univoci globali (GUID) sono rappresentati da trentadue cifre esadecimali, spesso disposte in raggruppamenti separati da trattini di varia lunghezza, come
3F2504E0-4F89-41D3-9A0C-0305E82C3301.
Rappresentazioni di simboli alternativi
Altre rappresentazioni esadecimali importanti utilizzano simboli distinti dalle lettere da "A" a "F" per denotare valori superiori a 9, tra cui:
- Negli anni '50, alcune installazioni informatiche, incluso Bendix-14, preferivano rappresentare i valori esadecimali 10–15 utilizzando le cifre da 0 a 5 con una linea superiore, che apparivano come §23§, §45§, §67§, §89§, §1011§ e §1213§.
- I computer SWAC (1950) e Bendix G-15 (1956) utilizzavano le lettere minuscole u, v, w, x, y e z per rappresentare i valori esadecimali da 10 a 15.
- I computer ORDVAC e ILLIAC I (1952), insieme ad alcuni progetti derivati come BRLESC, utilizzavano le lettere maiuscole K, S, N, J, F e L per i valori esadecimali da 10 a 15.
- Il Librascope LGP-30 (1956) assegnava le lettere F, G, J, K, Q e W a rappresentare i valori esadecimali da 10 a 15.
- Sul computer PERM (1956), i numeri esadecimali erano indicati con lettere: O per zero e da A a N, seguiti da P, per valori da 1 a 15. Numerose istruzioni macchina possedevano codici esadecimali mnemonici (ad esempio, A per aggiungere, M per moltiplicare, L per carico, F per punto fisso); di conseguenza, i programmi venivano composti senza nomi di istruzioni espliciti.
- L'Honeywell Datamatic D-1000 (1957) utilizzava le lettere minuscole b, c, d, e, f e g per i valori esadecimali da 10 a 15. Al contrario, l'Elbit 100 (1967) utilizzava le lettere maiuscole B, C, D, E, F e G per lo stesso intervallo di valori.
- Il Monrobot XI (1960) assegnava alle lettere S, T, U, V, W e X i valori esadecimali da 10 a 15.
- Il computer parametrico NEC NEAC 1103 (1960) utilizzava le lettere D, G, H, J, K (e potenzialmente V) per valori esadecimali compresi tra 10 e 15.
- Il Pacific Data Systems 1020 (1964) utilizzava le lettere L, C, A, S, M e D per denotare valori esadecimali da 10 a 15.
- Nel 1968, Boby Lapointe introdusse nuovi simboli numerici e nomi all'interno del sistema di notazione bibi-binaria.
- Bruce Alan Martin, affiliato al Brookhaven National Laboratory, ha definito "ridicola" la selezione di A – F. In una lettera del 1968 pubblicata nel CACM, sosteneva un set di simboli completamente nuovo derivato dalle posizioni dei bit.
- Ronald O. Whitaker, della Rowco Engineering Co., propose un carattere triangolare nel 1972, progettato per facilitare la "lettura binaria diretta" e consentire "sia l'input che l'output dai computer indipendentemente dalle matrici di codifica".
- Alcuni chip decodificatori per display a sette segmenti, come il 74LS47, mostrano un output anomalo perché la loro logica interna è progettata esclusivamente per la visualizzazione accurata delle cifre da 0 a 9.
Convenzione sulla firma
Il sistema esadecimale può rappresentare i numeri negativi analogamente al sistema decimale, anteponendo al numero un segno meno (-) per denotarne il valore negativo.
Rappresentazione di pattern di bit
La notazione esadecimale è in grado di esprimere modelli di bit del processore, consentendo a una sequenza di cifre esadecimali di rappresentare un intero con segno o un valore a virgola mobile. Ad esempio, il numero negativo −4210 può essere reso come FFFF FFD6 all'interno di un registro CPU a 32 bit (utilizzando il complemento a due), come C228 0000 in un registro FPU a 32 bit o come C045 0000 0000 0000 in un registro FPU a 64 bit (aderente allo standard IEEE a virgola mobile).
Notazione esponenziale
Similmente ai numeri decimali, anche i valori esadecimali possono essere espressi utilizzando la notazione esponenziale. La notazione P utilizza la lettera P (o p, che significa "potere"), analogamente a come funziona E (o e) nella notazione decimale E. Il numero che segue la P viene interpretato come un valore decimale e denota l'esponente binario. Incrementando questo esponente di uno si ottiene una moltiplicazione per 2, non per 16, come dimostrato dall'equivalenza: 20p0 = 10p1 = 8p2 = 4p3 = 2p4 = 1p5. In genere, il numero è normalizzato in modo tale che le cifre esadecimali inizino con 1. (con zero generalmente rappresentato come §1819§ senza P).
Ad esempio, 1.3DEp42 indica il valore 1.3DE16 × 24210.
La notazione P è richiesta dallo standard binario a virgola mobile IEEE 754-2008 ed è consentita per i valori letterali a virgola mobile all'interno dell'edizione C99 del linguaggio di programmazione C. Questa notazione può essere generata da implementazioni della famiglia di funzioni printf, aderendo alla specifica C99 e allo standard POSIX Single Unix Specifiche (IEEE Std 1003.1), attraverso l'uso degli specificatori di conversione %a o %A.
Rappresentazione verbale
Molte lingue europee non possiedono termini non decimali per i numeri compresi tra undici e quindici. Di conseguenza, alcuni individui articolano i numeri esadecimali cifra per cifra, simili a un numero di telefono, o impiegando sistemi come l'alfabeto fonetico della NATO, l'alfabeto fonetico congiunto dell'esercito e della marina o altri schemi improvvisati. In seguito alla diffusa adozione dell'esadecimale tra i programmatori IBM System/360, Magnuson (1968) propose una guida alla pronuncia assegnando nomi concisi alle lettere esadecimali; per esempio, "A" veniva pronunciato "ann", "B" come "bet" e "C" come "chris". Rogers (2007) ha successivamente pubblicato un sistema di denominazione online progettato per garantire una rappresentazione verbale distinta, anche per i numeri che non contengono A – F. Esempi illustrativi sono forniti nelle tabelle successive. Babb (2015) ha sviluppato ulteriormente un sistema di denominazione, traendo ispirazione da un riferimento umoristico nella Silicon Valley.
Proposte alternative includono l'utilizzo di convenzioni del codice Morse verbale per articolare cifre esadecimali a quattro bit, dove "dit" significa zero e "dah" significa uno. In questo sistema, "0000" viene vocalizzato come "dit-dit-dit-dit" (....), "dah-dit-dit-dah" (-..-) rappresenta la cifra con un valore di nove e "dah-dah-dah-dah" (----) denota la cifra esadecimale corrispondente al decimale 15.
Sono stati sviluppati sistemi di conteggio che impiegano cifre sia per il sistema binario che per quello decimale. rappresentazioni esadecimali. Arthur C. Clarke ha proposto un metodo in cui ogni dito funziona come un bit on/off, consentendo di contare da zero a 102310 utilizzando dieci dita. Un ulteriore sistema per contare fino a FF16 (25510) è illustrato nell'illustrazione allegata.
Procedure di conversione
Conversione binaria
Mentre la maggior parte dei computer elabora dati binari, gli esseri umani spesso incontrano difficoltà nel gestire l'ampio numero di cifre associate a valori binari anche di dimensioni moderate. Sebbene la maggior parte delle persone sia abituata al sistema base 10, convertire il binario in esadecimale è considerevolmente più semplice che convertire il binario in decimale, poiché ogni cifra esadecimale corrisponde direttamente a una sequenza completa di quattro bit (410). L'esempio successivo mostra la conversione di 11112 in base dieci. Dato che ogni posizione in un numero binario può contenere un 1 o uno 0, il suo valore numerico è facilmente accertabile in base alla sua posizione rispetto alla cifra più a destra.
- 00012 = 110
- 00102 = 210
- 01002 = 410
- 10002 = 810
Di conseguenza,
Con un minimo di pratica, la mappatura diretta di 11112 a F16 può essere facilmente ottenuta. I vantaggi derivanti dall'utilizzo della notazione esadecimale rispetto alla rappresentazione decimale aumentano in modo significativo con l'aumentare della grandezza numerica. Per numeri sostanziali, la conversione in decimale si rivela eccezionalmente laboriosa. Al contrario, quando si converte in esadecimale, il processo viene semplificato segmentando la stringa binaria in gruppi di quattro cifre, ciascuna delle quali può quindi essere direttamente mappata in una singola cifra esadecimale.
Questa illustrazione mostra la conversione di un numero binario nel suo equivalente decimale assegnando a ciascuna cifra binaria il suo valore decimale corrispondente e successivamente sommando questi risultati.
Al contrario, la conversione esadecimale consente la considerazione indipendente e la traduzione diretta di ciascun gruppo binario di quattro cifre:
La conversione inversa, da esadecimale a binario, è altrettanto semplice.
Conversioni alternative semplici
Sebbene la notazione quaternaria (base 4) abbia un'applicazione limitata, facilita la conversione diretta da e verso i sistemi esadecimali e binari. Nello specifico, ciascuna cifra esadecimale è correlata a due cifre quaternarie e ciascuna cifra quaternaria corrisponde a due cifre binarie. Ad esempio, l'esempio 2 5 C16 si traduce in 02 11 304.
Anche il sistema ottale (base 8) consente una conversione relativamente semplice, sebbene non con la stessa banalità delle basi 2 e 4. Ciascuna cifra ottale rappresenta tre cifre binarie, invece di quattro. Di conseguenza, la conversione tra ottale ed esadecimale può essere ottenuta attraverso una trasformazione intermedia in binario, seguita dal raggruppamento delle cifre binarie in gruppi di tre o quattro, a seconda dei casi.
Metodo divisione-resto nella base di origine
Coerentemente con altri sistemi numerici, esiste un algoritmo semplice per convertire la rappresentazione di un numero in esadecimale impiegando operazioni di divisione e resto di numeri interi all'interno della base di origine. Teoricamente questo metodo è applicabile da qualsiasi base; tuttavia, per il calcolo umano, è più facilmente gestito dal decimale, e per i computer, dal binario (anche se in genere esistono metodi di conversione più efficienti per il binario).
Sia d denotare il numero da rappresentare in esadecimale e lasciare che la sequenza hihi−1...h§45§h§67§ indichi le cifre esadecimali che compongono questo numero.
- Inizializza i su 1.
- Assegna a hi il valore di d modulo 16.
- Aggiorna d a (d − hi) diviso per 16.
- Se d è uguale a 0, restituisce la sequenza hi; in caso contrario, incrementare i e procedere al passaggio 2.
Il numero "16" può essere sostituito con qualsiasi altra base desiderata.
Di seguito viene fornita un'implementazione JavaScript dell'algoritmo sopra menzionato, progettata per convertire qualsiasi numero nella sua rappresentazione di stringa esadecimale. Questa implementazione serve a chiarire l'algoritmo descritto. Tuttavia, per una manipolazione efficace dei dati, è decisamente più consigliabile utilizzare operatori bit a bit.
Conversione tramite addizione e moltiplicazione
In alternativa, la conversione può essere ottenuta assegnando a ciascun valore posizionale nella base di origine la sua rappresentazione esadecimale, prima di eseguire la moltiplicazione e l'addizione per ricavare la rappresentazione finale. Ad esempio, per convertire il numero esadecimale B3AD in decimale, è possibile scomporlo nelle sue cifre costituenti: B (1110), 3 (310), A (1010) e D (1310). Il risultato finale si ottiene quindi moltiplicando ciascuna rappresentazione decimale per 16p, dove p denota la corrispondente posizione della cifra esadecimale, enumerata da destra a sinistra, iniziando da 0. Pertanto, in questo caso specifico:
B3AD = (11 × 163) + (3 × 16§34§) + (10 × 16§56§) + (13 × 16§78§)
Questo calcolo restituisce 45997 in base 10.
Utilità di conversione
Numerosi sistemi operativi per computer incorporano utilità di calcolo che facilitano le conversioni tra vari sistemi numerici, spesso compreso quello esadecimale.
All'interno di Microsoft Windows, l'applicazione Calcolatrice, se impostata sulla modalità Programmatore, consente le conversioni tra esadecimale e altre basi di programmazione prevalenti.
Operazioni aritmetiche fondamentali
Le operazioni aritmetiche di base, inclusa la divisione, possono essere eseguite indirettamente convertendo i numeri in un sistema numerico alternativo, come il sistema decimale ampiamente adottato o il sistema binario, in cui ciascuna cifra esadecimale corrisponde a quattro cifre binarie.
Al contrario, le operazioni fondamentali possono essere eseguite direttamente all'interno del sistema esadecimale utilizzando le sue specifiche tabelle di addizione e moltiplicazione, insieme ad algoritmi standard come la divisione lunga e l'algoritmo di sottrazione convenzionale.
Rappresentazione di numeri reali
Rappresentazione dei numeri razionali
Simile ad altri sistemi numerici, il sistema esadecimale è in grado di rappresentare numeri razionali. Tuttavia, si incontrano spesso espansioni ripetute perché sedici (1016) possiedono un solo fattore primo: due.
In qualsiasi base numerica, la rappresentazione frazionaria 0.1 (o "1/10") denota costantemente il valore ottenuto dividendo uno per la rappresentazione numerica della base all'interno del proprio sistema. Di conseguenza, sia che rappresentino uno diviso per due in binario o uno diviso per sedici in esadecimale, entrambe le frazioni sono uniformemente espresse come 0.1. Dato che la radice 16 è un quadrato perfetto (42), le frazioni esadecimali mostrano un periodo dispari con maggiore frequenza rispetto alle frazioni decimali e mancano di numeri ciclici, escludendo banali istanze a una cifra. Le cifre ricorrenti emergono quando il denominatore, ridotto ai minimi termini, possiede un fattore primo non presente nella radice. Pertanto, nella notazione esadecimale, qualsiasi frazione con un denominatore che non sia una potenza di due produrrà una sequenza infinita di cifre ripetute (ad esempio, un terzo e un quinto). Questa caratteristica rende l'esadecimale (e il binario) meno pratico del decimale per rappresentare i numeri razionali, poiché una parte sostanziale di questi numeri non rientra nella loro capacità di rappresentazione finita.
Tutti i numeri razionali che possono essere rappresentati finitamente in esadecimale sono similmente rappresentabili con un numero finito di cifre nei sistemi decimale, duodecimale e sessagesimale. Viceversa, solo un sottoinsieme dei numeri finitamente rappresentabili in queste ultime basi può essere espresso finitamente in esadecimale. Ad esempio, il valore decimale 0.1 si traduce nella rappresentazione esadecimale infinitamente ricorrente 0.19. Tuttavia, l'esadecimale offre una maggiore efficienza rispetto ai sistemi duodecimale e sessagesimale per esprimere le frazioni in cui il denominatore è una potenza di due. Ad esempio, 0,062510 (un sedicesimo) equivale a 0,116 in esadecimale, 0,0912 in duodecimale e 0;3,4560 in sessagesimale.
Numeri irrazionali
La tabella successiva presenta le espansioni decimali ed esadecimali di diversi numeri irrazionali incontrati di frequente.
Poteri
Le 16 potenze iniziali di 2 sono elencate di seguito in formato esadecimale, illustrando la loro semplicità comparativa se confrontate con la rappresentazione decimale.
Storia culturale
Storicamente, le unità di misura tradizionali cinesi erano basate su un sistema esadecimale. Ad esempio, nel sistema precedente, un jīn (斤) equivaleva a sedici tael. Il suanpan, un abaco cinese, è in grado di eseguire calcoli esadecimali, comprese addizioni e sottrazioni.
Simile al sistema duodecimale, l'esadecimale è stato oggetto di sforzi intermittenti per sostenere la sua adozione come sistema numerico primario. Tali proposte spesso includono suggerimenti per pronunce e simboli distinti per ciascun numero. Alcune proposizioni mirano a standardizzare le misurazioni rendendole multipli di 16. Un primo esempio di tale proposta fu presentato da John W. Nystrom nella sua pubblicazione del 1862, Progetto di un nuovo sistema di aritmetica, peso, misura e monete: proposto per essere chiamato sistema tonale, con sedici alla base. Tra i suoi vari suggerimenti, Nystrom propose un sistema temporale esadecimale, in cui un giorno sarebbe diviso in 16 "ore" (o "10 tims", pronunciato tontim).
Il termine esadecimale è apparso per la prima volta nell'uso documentato nel 1952. Questa parola è maccheronica e fonde la radice greca ἕξ (esadecimale), che significa "sei", con il suffisso latino -decimale. L'alternativa interamente latina, sexadecimale (che può essere paragonata a sexagesimal per la base 60), è antecedente a esadecimale e fu usata sporadicamente dalla fine del XIX secolo. Il suo utilizzo persistette negli anni '50, apparendo in particolare nella documentazione Bendix. Schwartzman (1994) postula che il termine sexadecimale potrebbe essere stato evitato a causa della sua abbreviazione potenzialmente suggestiva in sesso. Dagli anni '60, numerose lingue occidentali hanno adottato termini strutturalmente analoghi all'esadecimale (ad esempio, francese esadecimale, italiano esadecimale, rumeno esazecimale, serbo хексадецимални). Al contrario, altre lingue hanno introdotto termini che utilizzano parole native per "sedici" (ad esempio, greco δεκαεξαδικός, islandese sextándakerfi, russo шестнадцатеричной).
La terminologia e la notazione standardizzate per il formato esadecimale furono stabilite solo alla fine degli anni '60. Nel 1969, Donald Knuth sostenne che il termine etimologicamente preciso sarebbe stato senidenario, o potenzialmente sedenario. Questi termini latini furono concepiti per significare "raggruppati per 16", seguendo lo schema di sistemi binario, ternario, quaternario e simili. Coerentemente con il ragionamento di Knuth, i termini appropriati per l'aritmetica decimale e ottale sarebbero rispettivamente denario e ottonario. Alfred B. Taylor utilizzò il termine senidenario nella sua ricerca della metà del XIX secolo sulle basi numeriche alternative, ma scartò la base 16 a causa del suo "numero scomodo di cifre".
L'attuale notazione esadecimale, che utilizza le lettere dalla A alla F, è diventata lo standard de facto a partire dal 1966, in seguito al rilascio del manuale Fortran IV per IBM System/360. Questo manuale, a differenza delle precedenti versioni Fortran, stabilisce uno standard per l'immissione di costanti esadecimali. Notazioni alternative furono utilizzate da NEC nel 1960 e da The Pacific Data Systems 1020 nel 1964. Nel 1968, lo standard adottato da IBM sembrava essere ampiamente accettato, spingendo Bruce Alan Martin a esprimere preoccupazioni in una lettera all'editore del CACM.
Con la ridicola scelta delle lettere A, B, C, D, E, F come simboli numerici esadecimali che si aggiunge ai problemi già fastidiosi di distinguere i numeri ottali (o esadecimali) dai numeri decimali (o nomi di variabili), i tempi sono troppo maturi per riconsiderare i nostri simboli numerici. Questo avrebbe dovuto essere fatto prima che le scelte sbagliate diventassero uno standard de facto!
Martin sosteneva che l'utilizzo dei numeri da 0 a 9 in sistemi di numerazione non decimali "implica per noi uno schema di valori posizionali in base dieci". Ha proposto: "Perché non utilizzare simboli (e nomi) completamente nuovi per le sette o quindici cifre diverse da zero necessarie in ottale o esadecimale. Anche l'uso delle lettere dalla A alla P sarebbe un miglioramento, ma simboli completamente nuovi potrebbero riflettere la natura binaria del sistema." Inoltre, ha affermato che "il riutilizzo di lettere alfabetiche per cifre numeriche rappresenta un gigantesco passo indietro rispetto all'invenzione di glifi distinti e non alfabetici per i numeri sedici secoli fa", citando come esempi i numeri Brahmi e il successivo sistema numerico indù-arabo. Ha anche criticato i recenti standard ASCII (ASA X3.4-1963 e USAS X3.4-1968) per non essere riusciti a "preservare sei posizioni della tabella dei codici dopo le dieci cifre decimali, anziché riempirle inutilmente con caratteri di punteggiatura" (":;<=>?") che avrebbero potuto essere allocati ad altre posizioni all'interno delle 128 disponibili.
Base16
Base16 rappresenta uno schema di codifica da binario a testo, appartenente a una famiglia che include Base32, Base58 e Base64. In questo sistema, i dati vengono segmentati in sequenze di 4 bit, con ciascun valore risultante (compreso tra 0 e 15) successivamente codificato come un carattere distinto. Anche se teoricamente potrebbe essere utilizzato qualsiasi set di 16 caratteri, la pratica convenzionale impone l'uso delle cifre ASCII "0"–"9" e delle lettere "A"–"F" (o "a"–"f") per mantenere la coerenza con la notazione esadecimale standard.
La codifica Base16 gode di un'adozione diffusa negli ambienti informatici contemporanei. Costituisce l'elemento fondamentale per lo standard W3C che regola la codifica percentuale dell'URL, un processo in cui i caratteri vengono sostituiti con un segno di percentuale "%" seguito dalla loro rappresentazione con codifica Base16. Inoltre, la maggior parte dei linguaggi di programmazione moderni incorpora nativamente funzionalità sia per la formattazione che per l'analisi di valori numerici con codifica Base16.
Vantaggi della codifica Base16:
- La maggior parte dei linguaggi di programmazione offre funzionalità intrinseche per l'analisi di valori esadecimali con codifica ASCII.
- Essendo un'unità a 4 bit, precisamente mezzo byte, offre un'elaborazione più semplice rispetto alle unità a 5 o 6 bit utilizzate rispettivamente da Base32 e Base64.
- La notazione stabilita è ampiamente riconosciuta e facilmente comprensibile, ovviando alla necessità di una tabella di ricerca dei simboli.
- Numerose architetture CPU incorporano istruzioni specializzate che consentono l'accesso diretto a mezzo byte (noto anche come nibble), migliorandone così l'efficienza hardware rispetto a Base32 e Base64.
Svantaggi della codifica Base16:
- La sua efficienza in termini di spazio è limitata al 50%, poiché ogni valore a 4 bit dei dati di origine è codificato in un byte a 8 bit; al contrario, le codifiche Base32 e Base64 raggiungono efficienze in termini di spazio rispettivamente del 63% e del 75%.
- La necessità di contenere sia lettere maiuscole che minuscole introduce un ulteriore livello di complessità.
Formula Bailey–Borwein–Plouffe – Una formula per calcolare l'ennesima cifra in base 16 di π.
- Formula di Bailey–Borwein–Plouffe – Formula per calcolare l'ennesima cifra in base 16 di π
- Dump esadecimale: rappresentazione esadecimale dei dati del computer.
- Editor esadecimale: un editor progettato per la manipolazione dei dati a livello di byte.
- Ora esadecimale – Un formato temporale in base 16 inizialmente proposto nel 1863.
- Hexspeak – Una nuova forma di variante ortografica inglese.
- Virgola mobile esadecimale IBM – Uno specifico schema di rappresentazione dei numeri.
- Notazione P: una notazione concisa utilizzata per rappresentare numeri eccezionalmente grandi o piccoli.Pagine che mostrano brevi descrizioni delle destinazioni di reindirizzamento