El sistema hexadecimal ( o hex, para abreviar) es un sistema numérico posicional para representar un valor numérico en base 16. En la convención más común, un dígito se representa como un número del 0 al 9, al igual que en el sistema decimal , y como una letra del alfabeto de la A a la F (mayúscula o minúscula) para los dígitos con valor decimal del 10 al 15.
Como el hardware informático típico es de naturaleza binaria y el hexadecimal es una potencia de 2 , la representación hexadecimal se usa a menudo en computación como una representación densa de información binaria . Un dígito hexadecimal representa 4 bits contiguos , conocidos como nibble . [ 1 ] Un byte de 8 bits son dos dígitos hexadecimales, como 2C.
A menudo se utiliza una notación especial para indicar que un número es hexadecimal. En matemáticas , normalmente se utiliza un subíndice para especificar la base. Por ejemplo, el valor decimal.491 se expresaría en hexadecimal como 1EB 16 . En programación informática , se utilizan diversas notaciones. En C y muchos lenguajes relacionados, 0xse utiliza el prefijo. Por ejemplo, .0x1EB
Representación escrita
Convención común
Por lo general, una convención de representación hexadecimal permite letras mayúsculas o minúsculas y trata la letra de la misma manera independientemente de si usa mayúsculas o minúsculas.
A menudo, al representar datos no textuales, un valor almacenado en memoria se muestra como una secuencia de dígitos hexadecimales con espacios entre ellos. Por ejemplo, en el siguiente volcado hexadecimal , cada byte de 8 bits es un número hexadecimal de 2 dígitos, con espacios entre ellos, mientras que el desplazamiento de 32 bits al inicio es un número hexadecimal de 8 dígitos.
00000000 57 69 6B 69 70 65 64 69 61 2C 20 74 68 65 20 66 00000010 72 65 65 20 65 6E 63 79 63 6C 6F 70 65 64 69 61 00000020 20 74 68 61 74 20 61 6E 79 6F 6E 65 20 63 61 6E 00000030 20 65 64 69 74 2C 20 69 6E 63 6C 75 64 69 6E 67 00000040 20 79 6F 75 20 28 61 6E 64 20 6D 65 29 21Identificación
Existen varias convenciones para expresar que un número se representa en formato hexadecimal.
- Un subíndice decimal puede indicar la base explícitamente. Por ejemplo, 159 10 indica 159 decimal, 159 16 indica 159 hexadecimal. Algunos prefieren un subíndice de texto, como 159 decimal y 159 hexadecimal , o 159 d y 159 h.
- En C y muchos lenguajes influenciados por él, el prefijo
0xindica que el literal numérico que le sigue está en hexadecimal, un carácter de una cadena o literal de carácter puede expresarse como hexadecimal con el prefijo\x(por ejemplo,'\x1B'representa el carácter de control Esc ) y para mostrar un entero como hexadecimal a través de una función similar a printf , se utiliza el código de conversión de formato%Xo%x
- En las URI (incluidas las URL ), los códigos de caracteres se escriben como pares hexadecimales precedidos de
%:http://www.example.com/name%20with%20spacesdonde%20es el código para el carácter de espacio (en blanco) , punto de código ASCII 20 en hexadecimal, 32 en decimal.
- En XML y XHTML , un carácter puede expresarse como una referencia numérica hexadecimal utilizando la notación , por ejemplo, representa el carácter U+0054 (la letra mayúscula "T"). Si no hay , el número es decimal (por lo tanto, es el mismo carácter). [ 2 ]
ode;TxT
- En los lenguajes ensamblador derivados de Intel y Modula-2, [ 3 ] hexadecimal se denota con un sufijo H o h : o . Algunas implementaciones requieren un cero inicial cuando el primer dígito hexadecimal no es un dígito decimal, por lo que se escribiría en lugar de . Otras implementaciones (como NASM) permiten números al estilo C ( ).
FFh05A3H0FFhFFh0x42
- Otros lenguajes ensamblador ( 6502 , Motorola ), Pascal , Delphi , algunas versiones de BASIC ( Commodore ), GameMaker Language , Godot y Forth usan
$como prefijo:$5A3,$C1F27ED
- Algunos lenguajes ensamblador (Microchip) utilizan la notación
H'ABCD'(para ABCD 16 ); de manera similar, Fortran 95 utiliza Z'ABCD'.
- Ada y VHDL encierran los números hexadecimales entre "comillas numéricas":
16#5A3#,16#C1F27ED#. Para las constantes de vectores de bits, VHDL utiliza la notaciónx"5A3",x"C1F27ED". [ 4 ]
- Verilog representa las constantes hexadecimales en la forma
8'hFF, donde 8 es el número de bits en el valor y FF es la constante hexadecimal.
- PostScript y el Bourne shell y sus derivados denotan hexadecimal con el prefijo
16#:16#5A3,16#C1F27ED
- Common Lisp utiliza los prefijos
#xy#16r. Al establecer las variables *read-base* [ 5 ] y *print-base* [ 6 ] en 16, también se puede cambiar el lector y la impresora de un sistema Common Lisp a la representación hexadecimal para leer e imprimir números. De esta forma, los números hexadecimales se pueden representar sin el código de prefijo #x o #16r, cuando la base de entrada o salida se ha cambiado a 16.
- MSX BASIC , [ 7 ] QuickBASIC , FreeBASIC y Visual Basic anteponen números hexadecimales con
&H:&H5A3
- Uso de BBC BASIC y Locomotive BASIC
¶ hexadecimal [ 8 ]
- Las series TI-89 y 92 utilizan un
0hprefijo:0h5A3,0hC1F27ED
- ALGOL 68 utiliza el prefijo
16rpara denotar números hexadecimales:16r5a3,16rC1F27ED. Los números binarios, cuaternarios (base 4) y octales se pueden especificar de manera similar.
- El formato hexadecimal más común en los mainframes ( zSeries ) y ordenadores de gama media ( IBM i ) de IBM que ejecutan los sistemas operativos tradicionales ( zOS , zVSE , zVM , TPF , IBM i ) es
X'5A3'oX'C1F27ED', y se utiliza en ensamblador, PL/I , COBOL , JCL , scripts, comandos y otros lugares. Este formato también era común en otros sistemas IBM (ahora obsoletos). Ocasionalmente se utilizaban comillas en lugar de apóstrofes.
- Donald Knuth utilizó una tipografía de máquina de escribir para representar hexadecimal en su libro The TeXbook , [ 9 ] como: 5A3 , C1F27ED
Implícito
En algunos contextos, un número siempre se escribe en formato hexadecimal y, por lo tanto, no necesita ninguna notación de identificación.
- En el estándar Unicode , el valor de un carácter se representa con
U+seguido del valor hexadecimal, por ejemplo,U+00A1es el signo de exclamación invertido (¡).
- Las referencias de color en HTML, CSS y X Window se pueden expresar con seis dígitos hexadecimales (dos para cada uno de los componentes rojo, verde y azul, en ese orden) precedidos por
#: magenta , por ejemplo, se representa como#FF00FF. [ 10 ] CSS también permite abreviaturas de 3 dígitos hexadecimales con un dígito hexadecimal por componente:#FA3abrevia#FFAA33, un naranja dorado .
- En la codificación quoted-printable de MIME (extensiones de correo electrónico) , los códigos de caracteres se escriben como pares hexadecimales precedidos por : es "España" (F1 hexadecimal es el código para ñ en el conjunto de caracteres ISO/IEC 8859-1). [ 11 ] )
=Espa=F1a
- Los datos binarios de PostScript (como los píxeles de una imagen ) se pueden expresar como pares hexadecimales consecutivos sin prefijo:
AA213FD51B3801043FBC... - Cualquier dirección IPv6 se puede escribir como ocho grupos de cuatro dígitos hexadecimales (a veces llamados hextetos ), donde cada grupo está separado por dos puntos (
:). Por ejemplo, esta es una dirección IPv6 válida:2001:0db8:85a3:0000:0000:8a2e:0370:7334o abreviada eliminando los ceros iniciales como2001:db8:85a3::8a2e:370:7334( Las direcciones IPv4 generalmente se escriben en decimal).
- Los identificadores únicos globales se escriben como treinta y dos dígitos hexadecimales, a menudo en grupos desiguales separados por guiones, por ejemplo
3F2504E0-4F89-41D3-9A0C-0305E82C3301.
Símbolos alternativos


Otras representaciones hexadecimales destacables que utilizan símbolos distintos de las letras "A" a "F" para representar los dígitos superiores a 9 incluyen:
- Durante la década de 1950, algunas instalaciones, como Bendix-14, prefirieron usar los dígitos del 0 al 5 con una línea superior para denotar los valores del 10 al 15 como 0 , 1 , 2 , 3 , 4 y 5 .
- Las computadoras SWAC (1950) [ 15 ] y Bendix G-15 (1956) [ 16 ] [ 15 ] usaban las letras minúsculas u , v , w , x , y y z para los valores del 10 al 15.
- Las computadoras ORDVAC e ILLIAC I (1952) (y algunos diseños derivados, por ejemplo BRLESC ) usaban las letras mayúsculas K , S , N , J , F y L para los valores de 10 a 15. [ 17 ] [ 15 ]
- El Librascope LGP-30 (1956) utilizaba las letras F , G , J , K , Q y W para los valores de 10 a 15. [ 18 ] [ 15 ]
- En la computadora PERM (1956), los números hexadecimales se escribían con las letras O para cero, A a N y P para 1 a 15. Muchas instrucciones de máquina tenían códigos hexadecimales mnemotécnicos ( A = suma, M = multiplicación, L = carga, F = punto fijo, etc.); los programas se escribían sin nombres de instrucciones. [ 19 ]
- El Honeywell Datamatic D-1000 (1957) utilizaba las letras minúsculas b , c , d , e , f y g, mientras que el Elbit 100 (1967) utilizaba las letras mayúsculas B , C , D , E , F y G para los valores del 10 al 15. [ 15 ]
- El Monrobot XI (1960) utilizó las letras S , T , U , V , W y X para los valores del 10 al 15. [ 15 ]
- El computador de parametrones NEC NEAC 1103 (1960) utilizaba las letras D , G , H , J , K (y posiblemente V ) para los valores 10–15. [ 20 ]
- El Pacific Data Systems 1020 (1964) utilizó las letras L , C , A , S , M y D para los valores de 10 a 15. [ 15 ]
- En 1968, Boby Lapointe introdujo nuevos símbolos y nombres numéricos en la notación binaria Bibi .
- Bruce Alan Martin, del Laboratorio Nacional de Brookhaven, consideró "ridícula" la elección de A-F. En una carta al editor de la CACM de 1968 , propuso un conjunto de símbolos completamente nuevo basado en las posiciones de los bits. [ 12 ]
- En 1972, Ronald O. Whitaker de Rowco Engineering Co. propuso una fuente triangular que permite la "lectura binaria directa" para "permitir tanto la entrada como la salida de las computadoras sin tener en cuenta las matrices de codificación". [ 13 ] [ 14 ]
- Algunos chips decodificadores de pantallas de siete segmentos (es decir, 74LS47) muestran una salida inesperada debido a una lógica diseñada solo para producir correctamente los números del 0 al 9. [ 21 ]
Firmar
El sistema hexadecimal puede expresar números negativos de la misma manera que en el sistema decimal, colocando un signo menos (−) delante del número para indicar que es negativo.
Patrón de bits
El sistema hexadecimal puede expresar el patrón de bits en un procesador , por lo que una secuencia de dígitos hexadecimales puede representar un valor con signo o incluso un valor de punto flotante . De esta manera, el número negativo −42 10 se puede escribir como FFFF FFD6 en un registro de CPU de 32 bits (en complemento a dos ), como C228 0000 en un registro FPU de 32 bits o C045 0000 0000 0000 en un registro FPU de 64 bits (en el estándar de punto flotante IEEE ).
Notación exponencial
Así como los números decimales se pueden representar en notación exponencial , también se pueden representar los números hexadecimales. La notación P utiliza la letra P (o p , de "potencia"), mientras que E (o e ) cumple una función similar en la notación decimal E. El número que sigue a la P es decimal y representa el exponente binario . Aumentar el exponente en 1 multiplica por 2, no por 16: 20p0 = 10p1 = 8p2 = 4p3 = 2p4 = 1p5 . Normalmente, el número se normaliza de modo que los dígitos hexadecimales comiencen con 1. (El cero suele ser 0 sin P ).
Ejemplo: 1.3DEp42 representa 1.3DE 16 × 2 42 10 .
La notación P es requerida por el estándar de punto flotante binario IEEE 754-2008 y puede usarse para literales de punto flotante en la edición C99 del lenguaje de programación C. [ 22 ] Usando los especificadores de conversión %a o %A , esta notación puede ser producida por implementaciones de la familia de funciones printf siguiendo la especificación C99 [ 23 ] y el estándar POSIX Single Unix Specification (IEEE Std 1003.1) . [ 24 ]
Representación verbal

La mayoría de las lenguas europeas carecen de palabras no decimales para algunos de los numerales del once al quince. Algunas personas leen los números hexadecimales dígito por dígito, como un número de teléfono, o utilizando el alfabeto fonético de la OTAN , el alfabeto fonético conjunto del ejército y la marina , o un sistema ad hoc similar . Tras la adopción del sistema hexadecimal entre los programadores del IBM System/360 , Magnuson (1968) [ 25 ] sugirió una guía de pronunciación que asignaba nombres cortos a las letras hexadecimales; por ejemplo, la "A" se pronunciaba "ann", la "B" "bet", la "C" "chris", etc. [ 25 ] Rogers (2007) [ 26 ] publicó en línea otro sistema de nomenclatura que intenta que la representación verbal sea distinguible en cualquier caso, incluso cuando el número real no contiene los números de la A a la F. En las tablas siguientes se muestran algunos ejemplos. Babb (2015) elaboró otro sistema de nomenclatura, basado en una broma de Silicon Valley . [ 27 ]
Otros han propuesto utilizar las convenciones del código Morse verbal para expresar dígitos hexadecimales de cuatro bits, donde "dit" y "dah" representan cero y uno, respectivamente, de modo que "0000" se expresa como "dit-dit-dit-dit" (....), "dah-dit-dit-dah" (-..-) expresa el dígito con un valor de nueve, y "dah-dah-dah-dah" (----) expresa el dígito hexadecimal para el decimal 15.
Se han ideado sistemas de conteo de dígitos tanto para binario como para hexadecimal. Arthur C. Clarke sugirió usar cada dedo como un bit de encendido/apagado, lo que permite contar con los dedos desde cero hasta 1023 10 en diez dedos. [ 28 ] Otro sistema para contar hasta FF 16 (255 10 ) se ilustra a la derecha.
Conversión
Conversión binaria

La mayoría de las computadoras manipulan datos binarios, pero para los humanos es difícil trabajar con una gran cantidad de dígitos, incluso para un número binario relativamente pequeño. Aunque la mayoría de los humanos están familiarizados con el sistema de base 10, es mucho más fácil convertir binario a hexadecimal que a decimal, ya que cada dígito hexadecimal se corresponde con un número entero de bits (4¹⁰ ) . Este ejemplo convierte 1111² a base diez. Dado que cada posición en un número binario puede contener un 1 o un 0, su valor se puede determinar fácilmente por su posición desde la derecha:
- 0001 2 = 1 10
- 0010 2 = 2 10
- 0100 2 = 4 10
- 1000 2 = 8 10
Por lo tanto:
Con un poco de práctica, mapear 1111 2 a F 16 en un solo paso se vuelve sencillo. La ventaja de usar hexadecimal en lugar de decimal aumenta rápidamente con el tamaño del número. Cuando el número es grande, la conversión a decimal es muy tediosa. Sin embargo, al mapear a hexadecimal, es trivial considerar la cadena binaria como grupos de 4 dígitos y asignar cada uno a un solo dígito hexadecimal. [ 29 ]
Este ejemplo muestra la conversión de un número binario a decimal, asignando a cada dígito su valor decimal y sumando los resultados.
Compárese esto con la conversión a hexadecimal, donde cada grupo de cuatro dígitos puede considerarse de forma independiente y convertirse directamente:
La conversión de hexadecimal a binario es igualmente directa. [ 29 ]
Otras conversiones sencillas
Aunque el sistema cuaternario (base 4) se usa poco, se puede convertir fácilmente a y desde hexadecimal o binario. Cada dígito hexadecimal corresponde a un par de dígitos cuaternarios, y cada dígito cuaternario corresponde a un par de dígitos binarios. En el ejemplo anterior, 2 5 C 16 = 02 11 30 4 .
El sistema octal (base 8) también se puede convertir con relativa facilidad, aunque no tan fácilmente como con las bases 2 y 4. Cada dígito octal corresponde a tres dígitos binarios, en lugar de cuatro. Por lo tanto, podemos convertir entre octal y hexadecimal mediante una conversión intermedia a binario, seguida de la reagrupación de los dígitos binarios en grupos de tres o cuatro.
Resto de división en la base de origen
Como ocurre con todas las bases numéricas, existe un algoritmo sencillo para convertir la representación de un número a hexadecimal mediante la división entera y la obtención del resto en la base original. En teoría, esto es posible desde cualquier base, pero para la mayoría de las personas, solo la decimal, y para la mayoría de las computadoras, solo la binaria (que puede convertirse mediante métodos mucho más eficientes), se puede manejar fácilmente con este método.
Sea d el número a representar en hexadecimal, y la serie h i h i−1 ...h 2 h 1 los dígitos hexadecimales que representan el número.
- yo ← 1
- h i ← d mod 16
- d ← (d − h i ) / 16
- Si d = 0 (devuelve la serie h i ) de lo contrario incrementa i y ve al paso 2
"16" puede ser reemplazado por cualquier otra base que se desee.
A continuación se muestra una implementación en JavaScript del algoritmo anterior para convertir cualquier número a su representación hexadecimal en cadena de caracteres. Su propósito es ilustrar dicho algoritmo. Sin embargo, para trabajar con datos de forma más rigurosa, es mucho más recomendable utilizar operadores bit a bit .
función toHex ( d ) { var r = d % 16 ; if ( d - r == 0 ) { volver a Char ( r ); } volver a Hex (( d - r ) / 16 ) + toChar ( r ); }función toChar ( n ) { const alpha = "0123456789ABCDEF" ; devolver alfa . charAt ( n ); }Conversión mediante suma y multiplicación

También es posible realizar la conversión asignando a cada posición de la base de origen la representación hexadecimal de su valor posicional , antes de realizar la multiplicación y la suma para obtener la representación final. Por ejemplo, para convertir el número B3AD a decimal, se puede dividir el número hexadecimal en sus dígitos: B (11 10 ), 3 (3 10 ), A (10 10 ) y D (13 10 ), y luego obtener el resultado final multiplicando cada representación decimal por 16 p ( donde p es la posición del dígito hexadecimal correspondiente, contando de derecha a izquierda, comenzando desde 0). En este caso, tenemos que:
B3AD = (11 × 16 3 ) + (3 × 16 2 ) + (10 × 16 1 ) + (13 × 16 0 )
que es 45997 en base 10.
Herramientas para la conversión
Muchos sistemas informáticos proporcionan una utilidad de calculadora capaz de realizar conversiones entre las distintas bases numéricas, incluyendo frecuentemente el sistema hexadecimal.
En Microsoft Windows , la Calculadora , en su modo Programador, permite realizar conversiones entre el sistema hexadecimal y otras bases de programación comunes.
aritmética elemental
Las operaciones elementales, como la división, pueden llevarse a cabo indirectamente mediante la conversión a un sistema numérico alternativo , como el sistema decimal de uso común o el sistema binario, donde cada dígito hexadecimal corresponde a cuatro dígitos binarios.
Como alternativa, también se pueden realizar operaciones elementales directamente dentro del propio sistema hexadecimal , utilizando sus tablas de suma y multiplicación y sus algoritmos estándar correspondientes, como la división larga y el algoritmo de resta tradicional.
Números reales
Números racionales
Al igual que otros sistemas numéricos, el sistema hexadecimal se puede utilizar para representar números racionales , aunque las expansiones repetitivas son comunes ya que dieciséis (10¹⁶ ) tiene un solo factor primo: dos.
Para cualquier base, 0.1 (o "1/10") siempre es equivalente a uno dividido por la representación de ese valor base en su propio sistema numérico. Por lo tanto, ya sea dividiendo uno por dos para binario o dividiendo uno por dieciséis para hexadecimal, ambas fracciones se escriben como 0.1. Debido a que la base 16 es un cuadrado perfecto (4 2 ), las fracciones expresadas en hexadecimal tienen un período impar con mucha más frecuencia que las decimales, y no hay números cíclicos (aparte de los dígitos simples triviales). Los dígitos recurrentes se presentan cuando el denominador en términos más simples tiene un factor primo que no se encuentra en la base; por lo tanto, al usar la notación hexadecimal, todas las fracciones con denominadores que no son potencias de dos dan como resultado una cadena infinita de dígitos recurrentes (como tercios y quintos). Esto hace que el hexadecimal (y el binario) sea menos conveniente que el decimal para representar números racionales, ya que una mayor proporción queda fuera de su rango de representación finita.
Todos los números racionales que se pueden representar de forma finita en hexadecimal también se pueden representar de forma finita en decimal, duodecimal y sexagesimal ; es decir, cualquier número hexadecimal con un número finito de dígitos también tiene un número finito de dígitos cuando se expresa en esas otras bases. Por el contrario, solo una fracción de los que se pueden representar de forma finita en estas últimas bases se pueden representar de forma finita en hexadecimal. Por ejemplo, el decimal 0.1 corresponde a la representación recurrente infinita 0.1 9 en hexadecimal. Sin embargo, el hexadecimal es más eficiente que el duodecimal y el sexagesimal para representar fracciones con potencias de dos en el denominador. Por ejemplo, 0.0625 10 (un dieciseisavo) es equivalente a 0.1 16 , 0.09 12 y 0;3,45 60 .
Números irracionales
La tabla que aparece a continuación muestra las expansiones de algunos números irracionales comunes en formato decimal y hexadecimal.
Potestades
Las primeras 16 potencias de 2 se muestran a continuación en formato hexadecimal para ilustrar la relativa simplicidad en comparación con la representación decimal.
Historia cultural
Las unidades de medida tradicionales chinas eran de base 16. Por ejemplo, un jīn (斤) en el sistema antiguo equivalía a dieciséis taeles . El suanpan ( ábaco chino ) se puede utilizar para realizar cálculos hexadecimales, como sumas y restas. [ 30 ]
Al igual que con el sistema duodecimal , ha habido intentos ocasionales de promover el hexadecimal como el sistema numérico preferido. Estos intentos a menudo proponen una pronunciación y símbolos específicos para los numerales individuales. [ 31 ] Algunas propuestas unifican las medidas estándar de modo que sean múltiplos de 16. [ 32 ] [ 33 ] Una de las primeras propuestas de este tipo fue presentada por John W. Nystrom en Project of a New System of Arithmetic, Weight, Measure and Coins: Proposed to be called the Tonal System, with Sixteen to the Base , publicado en 1862. [ 34 ] Nystrom sugirió, entre otras cosas, el tiempo hexadecimal , que subdivide un día por 16, de modo que hay 16 "horas" (o "10 tims ", pronunciado tontim ) en un día. [ 35 ]
La palabra hexadecimal se registra por primera vez en 1952. [ 36 ] Es macarrónica en el sentido de que combina el griego ἕξ (hex) "seis" con el latinizado -decimal . La alternativa totalmente latina sexadecimal (compárese con la palabra sexagesimal para base 60) es más antigua y se observa al menos un uso ocasional desde finales del siglo XIX. [ 37 ] Todavía se usa en la década de 1950 en la documentación de Bendix . Schwartzman (1994) argumenta que el uso de sexadecimal puede haberse evitado debido a su sugerente abreviatura de sexo . [ 38 ] Muchos idiomas occidentales desde la década de 1960 han adoptado términos equivalentes en formación a hexadecimal (por ejemplo, francés hexadécimal , italiano esadecimale , rumano hexazecimal , serbio хексадецимални , etc.), pero otros han introducido términos que sustituyen palabras nativas para "dieciséis" (por ejemplo, griego δεκαεξαδικός, islandés sextándakerfi , ruso шестнадцатеричной , etc.).
La terminología y la notación no se establecieron hasta finales de la década de 1960. En 1969, Donald Knuth argumentó que el término etimológicamente correcto sería senidenario , o posiblemente sedenario , un término de origen latino que pretendía transmitir "agrupado por 16" modelado a partir de binario , ternario , cuaternario , etc. Según el argumento de Knuth, los términos correctos para la aritmética decimal y octal serían denario y octonario , respectivamente. [ 39 ] Alfred B. Taylor utilizó senidenario en su trabajo de mediados del siglo XIX sobre bases numéricas alternativas, aunque rechazó la base 16 debido a su "incómoda cantidad de dígitos". [ 40 ] [ 41 ]
La notación actual que utiliza las letras de la A a la F se establece como el estándar de facto a partir de 1966, tras la publicación del manual de Fortran IV para IBM System/360 , que (a diferencia de las variantes anteriores de Fortran) reconoce un estándar para introducir constantes hexadecimales. [ 42 ] Como se indicó anteriormente, NEC (1960) y The Pacific Data Systems 1020 (1964) utilizaron notaciones alternativas . El estándar adoptado por IBM parece haberse generalizado en 1968, cuando Bruce Alan Martin, en su carta al editor de CACM, se queja de que
Con la ridícula elección de las letras A, B, C, D, E y F como símbolos numéricos hexadecimales, que agrava los problemas ya existentes para distinguir los números octales (o hexadecimales) de los decimales (o nombres de variables), es hora de reconsiderar nuestros símbolos numéricos. ¡Esto debería haberse hecho antes de que estas malas decisiones se convirtieran en un estándar de facto!
El argumento de Martin era que el uso de los números del 0 al 9 en números no decimales "nos implica un sistema de valor posicional de base diez": "¿Por qué no usar símbolos (y nombres) completamente nuevos para los siete o quince dígitos distintos de cero necesarios en octal o hexadecimal? Incluso el uso de las letras de la A a la P sería una mejora, pero símbolos completamente nuevos podrían reflejar la naturaleza binaria del sistema". [ 12 ] También argumentó que "reutilizar letras alfabéticas para dígitos numéricos representa un gigantesco paso atrás con respecto a la invención de glifos distintos, no alfabéticos, para numerales hace dieciséis siglos" (como numerales Brahmi y, posteriormente, en un sistema de numeración hindú-arábigo ), y que los estándares ASCII recientes (ASA X3.4-1963 y USAS X3.4-1968) "deberían haber conservado seis posiciones de la tabla de códigos después de los diez dígitos decimales, en lugar de llenarlas innecesariamente con caracteres de puntuación" (":;<=>?") que podrían haberse colocado en otro lugar entre las 128 posiciones disponibles.
Base16
Base16 es una codificación binaria a texto que pertenece a la misma familia que Base32 , Base58 y Base64 . Los datos se dividen en secuencias de 4 bits, y cada valor (0-15) se codifica como un carácter. Si bien se podrían usar 16 caracteres cualesquiera, en la práctica se utilizan los dígitos ASCII del 0 al 9 y las letras de la A a la F (o de la a a la f) para alinearse con la notación típica de los números hexadecimales.
La compatibilidad con la codificación Base16 es omnipresente en la informática moderna. Es la base del estándar W3C para la codificación porcentual de URL , donde un carácter se reemplaza por el signo de porcentaje "%" y su forma codificada en Base16. La mayoría de los lenguajes de programación modernos incluyen directamente compatibilidad para formatear y analizar números codificados en Base16.
Las ventajas de la codificación Base16 incluyen:
- La mayoría de los lenguajes de programación tienen herramientas para analizar datos hexadecimales codificados en ASCII.
- Al ser exactamente medio byte, 4 bits son más fáciles de procesar que los 5 o 6 bits de Base32 y Base64, respectivamente.
- La notación es bien conocida y fácil de entender sin necesidad de una tabla de búsqueda de símbolos.
- Muchas arquitecturas de CPU tienen instrucciones dedicadas que permiten el acceso a medio byte (también conocido como nibble), lo que lo hace más eficiente en hardware que Base32 y Base64.
Las desventajas incluyen:
- La eficiencia espacial es de solo el 50%, ya que cada valor de 4 bits de los datos originales se codificará como un byte de 8 bits; en contraste, las codificaciones Base32 y Base64 tienen una eficiencia espacial del 63% y el 75% respectivamente.
- Complejidad de aceptar letras mayúsculas y minúsculas
Véase también
- Fórmula de Bailey-Borwein-Plouffe : fórmula para calcular el enésimo dígito en base 16 de π.
- Volcado hexadecimal : vista hexadecimal de los datos informáticos
- Editor hexadecimal : editor para manipulación de bytes.
- Hora hexadecimal : formato de hora en base 16 propuesto en 1863.
- Hexspeak – Forma novedosa de ortografía variante del inglés
- IBM hexadecimal de punto flotante : representación numérica
- Notación P : notación concisa para números grandes o pequeños. Páginas que muestran descripciones breves de los destinos de redireccionamiento.
Referencias
- ↑ "El sistema hexadecimal" . Guía digital de Ionos . Archivado del original el 26 de agosto de 2022. Consultado el 26 de agosto de 2022 .
- ↑ "El estándar Unicode, versión 7" (PDF) . Unicode . Archivado (PDF) del original el 3 de marzo de 2016. Consultado el 28 de octubre de 2018 .
- ↑ "Módulo-2 – Vocabulario y representación" . Módulo −2 . Archivado del original el 13-12-2015 . Recuperado el 01-11-2015 .
- ↑ "Introducción a los tipos de datos VHDL" . Tutorial de FPGA . 10 de mayo de 2020. Archivado del original el 23 de agosto de 2020. Consultado el 21 de agosto de 2020 .
- ↑ "*read-base* variable en Common Lisp" . CLHS . Archivado del original el 3 de febrero de 2016. Recuperado el 10 de enero de 2015 .
- ↑ "*print-base* variable en Common Lisp" . CLHS . Archivado del original el 26-12-2014 . Recuperado el 10-01-2015 .
- ↑ MSX está llegando — Parte 2: Dentro de MSX Archivado el 24/11/2010 en Wayback Machine Compute!, número 56, enero de 1985, pág. 52
- ↑ Los programas de BBC BASIC no son totalmente portátiles a Microsoft BASIC (sin modificaciones) ya que este último toma
&como prefijo los valores octales . (Microsoft BASIC usa principalmente&Ocomo prefijo octal, y usa&Hcomo prefijo hexadecimal, pero el ampersand por sí solo produce una interpretación predeterminada como prefijo octal. - ↑ Knuth, Donald Ervin (1986). The TeXbook (PDF) . Duane Bibby. Reading, Mass.: American Mathematical Society y Addison-Wesley Publishing Company. ISBN 0-201-13448-9OCLC 12973034. Archivado del original (PDF) el 19 de noviembre de 2025.
- ↑ "Colores web hexadecimales explicados" . Archivado del original el 22 de abril de 2006. Consultado el 11 de enero de 2006 .
- ↑ " Codificación de caracteres ISO-8859-1 (ISO Latin 1)" . www.ic.unicamp.br . Archivado del original el 29 de junio de 2019. Consultado el 26 de junio de 2019 .
- 1 2 3 Martin, Bruce Alan (octubre de 1968). "Cartas al editor: Sobre la notación binaria" . Communications of the ACM . 11 (10). Associated Universities Inc .: 658. doi : 10.1145/364096.364107 . S2CID 28248410 .
- 1 2 Whitaker, Ronald O. (enero de 1972). Escrito en Indianápolis, Indiana, EE. UU. "Más sobre hombre/máquina" (PDF) . Cartas. Datamation . Vol. 18, n.º 1. Barrington, Illinois, EE. UU.: Technical Publishing Company . pág. 103. Archivado (PDF) del original el 5 de diciembre de 2022. Recuperado el 24 de diciembre de 2022 . (1 página)
- 1 2 Whitaker, Ronald O. (1976-08-10) [1975-02-24]. "Pantalla combinada y selector de rango para uso con instrumentos digitales que emplean el sistema de numeración binario" (PDF) . Indianápolis, Indiana, EE. UU. Patente estadounidense 3974444A. Archivado (PDF) del original el 24-12-2022 . Recuperado el 24-12-2022 .(7 páginas)
- 1 2 3 4 5 6 7 Savard, John JG (2018) [2005]. "Aritmética computacional" . quadibloc . Los primeros días del hexadecimal. Archivado del original el 16 de julio de 2018. Recuperado el 16 de julio de 2018 .
- ↑ "2.1.3 Notación sexadecimal". Manual de referencia del programador G15D (PDF) . Los Ángeles, CA, EE. UU.: Bendix Computer , División de Bendix Aviation Corporation . pág. 4. Archivado (PDF) del original el 1 de junio de 2017. Recuperado el 1 de junio de 2017.
Esta base se utiliza porque un grupo de cuatro bits puede representar cualquiera de dieciséis números diferentes (del cero al quince). Al asignar un símbolo a cada una de estas combinaciones, llegamos a una notación llamada sexadecimal (generalmente "hex" en la conversación porque nadie quiere abreviar "sex"). Los símbolos en el lenguaje sexadecimal son los diez dígitos decimales y, en la máquina de escribir G-15, las letras "u", "v", "w", "x", "y" y "z". Estas son marcas arbitrarias; otras computadoras pueden usar caracteres alfabéticos diferentes para estos últimos seis dígitos.
- ↑ Gill, S.; Neagher, RE; Muller, DE; Nash, JP; Robertson, JE; Shapin, T.; Whesler, DJ (1956-09-01). Nash, JP (ed.). "ILLIAC Programming – A Guide to the Preparation of Problems For Solution by the University of Illinois Digital Computer" (PDF) . bitsavers.org (Cuarta impresión. Edición revisada y corregida ). Urbana, Illinois, EE. UU.: Digital Computer Laboratory, Graduate College, University of Illinois . págs. 3–2 . Archivado (PDF) del original el 31-05-2017 . Recuperado el 18-12-2014 .
- ↑ Manual de programación de la computadora electrónica Royal Precision LGP-30 . Port Chester, Nueva York: Royal McBee Corporation . Abril de 1957. Archivado del original el 31 de mayo de 2017. Consultado el 31 de mayo de 2017 .(Nota: Esta secuencia un tanto extraña provenía de los siguientes seis códigos numéricos consecutivos del teclado en el código de caracteres de 6 bits del LGP-30 ).
- ↑ Manthey, Steffen; Leibrandt, Klaus (2 de julio de 2002). "Die PERM und ALGOL" (PDF) (en alemán). Archivado (PDF) desde el original el 3 de octubre de 2018 . Consultado el 19 de mayo de 2018 .
- ↑ Computadora digital NEC Parametron tipo NEAC-1103 (PDF) . Tokio, Japón: Nippon Electric Company Ltd. 1960. Cat. No. 3405-C. Archivado (PDF) del original el 31/05/2017 . Recuperado el 31/05/2017 .
- ↑ "SN5446A, '47A, '48, SN54LS47, 'LS48, 'LS49, SN7446A, '47A, '48, SN74LS47, 'LS48, 'LS49 Decodificadores/controladores BCD a siete segmentos" . Dallas, Texas, EE. UU.: Texas Instruments Incorporated . Marzo de 1988 [1974]. SDLS111. Archivado (PDF) del original el 20 de octubre de 2021. Recuperado el 15 de septiembre de 2021 .(29 páginas)
- ↑ "ISO/IEC 9899:1999 – Lenguajes de programación – C" . ISO . Iso.org. 8 de diciembre de 2011. Archivado del original el 10 de octubre de 2016. Consultado el 8 de abril de 2014 .
- ↑ "Fundamentos del estándar internacional – Lenguajes de programación – C" (PDF) . Estándares abiertos . 5.10. Abril de 2003. págs. 52, 153–154 , 159. Archivado (PDF) del original el 6 de junio de 2016. Consultado el 17 de octubre de 2010 .
- ↑ IEEE y The Open Group (2013) [2001]. "dprintf, fprintf, printf, snprintf, sprintf – salida formateada de impresión" . Especificaciones base de The Open Group (Edición 7, IEEE Std 1003.1, ed. 2013). Archivado del original el 21 de junio de 2016. Recuperado el 21 de junio de 2016 .
- 1 2 3 Magnuson, Robert A. (enero de 1968). "Guía de pronunciación hexadecimal". Datamation . Vol. 14, n.º 1, pág. 45.
- 1 2 Rogers, SR (2007). "Palabras numéricas hexadecimales" . Intuitor . Archivado del original el 17 de septiembre de 2019. Recuperado el 26 de agosto de 2019 .
- ↑ Babb, Tim (2015). "Cómo pronunciar hexadecimal" . Bzarg . Archivado del original el 11 de noviembre de 2020. Consultado el 1 de enero de 2021 .
- ↑ Clarke , Arthur; Pohl, Frederik (2008). El último teorema . Ballantine. pág. 91. ISBN 978-0007289981.
- 1 2 Mano, M. Morris; Ciletti, Michael D. (2013). Diseño digital: con una introducción al HDL Verilog (Quinta ed.). Pearson Education . págs. 6, 8–10 . ISBN 978-0-13-277420-8.
- ↑ "算盤 Suma y resta hexadecimal en un ábaco chino" . totton.idirect.com . Archivado del original el 6 de julio de 2019. Consultado el 26 de junio de 2019 .
- ↑ "Propuesta de símbolo hexadecimal en base 4^2" . Hauptmech . Archivado del original el 20 de octubre de 2021. Consultado el 4 de septiembre de 2008 .
- ↑ "Sede de Intuitor Hex" . Intuitor . Archivado del original el 4 de septiembre de 2010. Consultado el 28 de octubre de 2018 .
- ↑ Niemietz, Ricardo Cancho (21-10-2003). "Una propuesta para la adición de los seis dígitos hexadecimales (AF) a Unicode" (PDF) . ISO/IEC JTC1/SC2/WG2 . Recuperado el 25-06-2024 .
- ↑ Nystrom, John William (1862). Proyecto de un nuevo sistema de aritmética, peso, medida y monedas: propuesto para ser llamado Sistema Tonal, con dieciséis en base . Filadelfia: Lippincott.
- ↑ Nystrom (1862), p. 33: "Al expresar el tiempo, el ángulo de un círculo o los puntos cardinales, la unidad tim debe anotarse como un número entero, y sus partes como fracciones tonales , como 5·86 tims es cinco veces y metonby [*"sutim y metonby" John Nystrom accidentalmente da parte del número en nombres decimales; en el esquema de pronunciación de Nystrom, 5=su, 8=me, 6=by, cf unifoundry.com Archivado el 19-05-2021 en Wayback Machine ]."
- ↑ CE Fröberg, Tablas de conversión hexadecimales , Lund (1952).
- ↑ El Century Dictionary de 1895 incluye sexadecimal en el sentido más general de "relacionado con dieciséis". Un uso explícito temprano de sexadecimal en el sentido de "que utiliza la base 16" también se encuentra en 1895, en el Journal of the American Geographical Society of New York , vols. 27–28, pág. 197.
- ↑ Schwartzman, Steven (1994). The Words of Mathematics: An etymological dictionary of mathematical terms used in English . The Mathematical Association of America. p. 105. ISBN 0-88385-511-9.sv hexadecimal
- ↑ Knuth, Donald. (1969). El arte de la programación informática , Volumen 2. ISBN 0-201-03802-1(Capítulo 17.)
- ↑ Alfred B. Taylor, Informe sobre pesos y medidas , Asociación Farmacéutica, 8.ª Sesión Anual, Boston, 15 de septiembre de 1859. Véanse las páginas 33 y 41.
- ↑ Alfred B. Taylor, "Numeración octogonal y su aplicación a un sistema de pesos y medidas", Proc Amer. Phil. Soc. Vol XXIV Archivado el 24-06-2016 en Wayback Machine , Filadelfia, 1887; páginas 296–366. Véanse las páginas 317 y 322.
- ↑ Lenguaje FORTRAN IV de IBM System/360 Archivado el 19/05/2021 en Wayback Machine (1966), pág. 13.
- Aritmética binaria
- sistema numérico hexadecimal
- Sistemas numéricos de potencias de dos
- Sistemas de numeración posicional