Hexadecimal

format_list_bulleted Contenido keyboard_arrow_down
ImprimirCitar
Base-16 sistema numérico

En matemáticas y computación, el sistema numérico hexadecimal (también base-16 o simplemente hex) es un sistema numérico posicional que representa números usando una raíz (base) de 16. A diferencia del sistema decimal que representa números usando 10 símbolos, el hexadecimal usa 16 símbolos distintos, más a menudo los símbolos "0"–"9" para representar valores de 0 a 9, y "A"–"F" (o alternativamente "a"–"f") para representar valores de 10 a 15.

Los desarrolladores de software y los diseñadores de sistemas utilizan mucho los números hexadecimales porque proporcionan una representación humana de los valores codificados en binario. Cada dígito hexadecimal representa cuatro bits (dígitos binarios), también conocidos como nibble (o nybble). Por ejemplo, un byte de 8 bits puede tener valores que van desde 00000000 a 11111111 en forma binaria, que se pueden representar convenientemente como 00 a FF en hexadecimal.

En matemáticas, normalmente se usa un subíndice para especificar la base. Por ejemplo, el valor decimal 13,217 se expresaría en hexadecimal como 33A116. En programación, se utilizan varias notaciones para denotar números hexadecimales, generalmente con un prefijo. El prefijo 0x se usa en C, lo que denotaría este valor como 0x33A1.

El hexadecimal se utiliza en la codificación de transferencia Base16, en la que cada byte del texto sin formato se divide en dos valores de 4 bits y se representa mediante dos dígitos hexadecimales.

Representación

Representación escrita

En la mayoría de los casos de uso actuales, las letras A–F o a–f representan los valores 10–15, mientras que los números 0–9 se utilizan para representar sus valores decimales.

No existe una convención universal para usar mayúsculas o minúsculas, por lo que cada una prevalece o se prefiere en entornos particulares según los estándares o convenciones de la comunidad; incluso se utilizan mayúsculas y minúsculas. Las pantallas de siete segmentos utilizan mayúsculas y minúsculas AbCdEF para crear dígitos que se puedan distinguir entre sí.

Existe cierta estandarización en el uso de espacios (en lugar de comas u otro signo de puntuación) para separar los valores hexadecimales en una lista larga. 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 principio 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 00010 72 65 65 20 65 6e 63 79 63 6c 6f 70 65 64 69 61 00020 20 74 68 61 74 20 61 6e 79 6f 6e 65 20 63 61 6e 000 00030 20 65 64 69 74 0a

Distinguir de decimal

En contextos donde la base no es clara, los números hexadecimales pueden ser ambiguos y confundirse con números expresados en otras bases. Existen varias convenciones para expresar valores sin ambigüedades. Un subíndice numérico (escrito en decimal) puede dar la base explícitamente: 15910 es 159 decimal; 15916 es hexadecimal 159, lo que equivale a 34510. Algunos autores prefieren un subíndice de texto, como 159decimal y 159hex, o 159d y 159h.

Donald Knuth introdujo el uso de un tipo de letra particular para representar una raíz particular en su libro The TeXbook. Las representaciones hexadecimales están escritas allí en un tipo de letra de máquina de escribir: 5A3

En los sistemas de texto lineal, como los que se utilizan en la mayoría de los entornos de programación informática, han surgido una variedad de métodos:

  • Unix (y relacionados) shells, lenguaje de montaje AT plagaT y también el lenguaje de programación C (y sus descendientes sintácticos como C++, C#, Go, D, Java, JavaScript, Python y Windows PowerShell) usan el prefijo 0x para las constantes numéricas representadas en hex: 0x5A3. Las constantes de caracteres y cadenas pueden expresar códigos de caracteres en hexadecimal con el prefijo x seguido de dos dígitos hex: 'x1B' representa el carácter de control Esc; "x1B[0mx1B[25;1H" es una cadena que contiene 11 caracteres con dos caracteres Esc incrustados. Para producir un entero como hexadecimal con la familia función printf, el código de conversión de formato %X o %x se utiliza.
  • En URIs (incluyendo URLs), los códigos de caracteres se escriben como pares hexadecimales prefijados con %: http://www.example.com/name%20with%20spaces Donde %20 es el código para el carácter del espacio (negro), punto de código ASCII 20 en hex, 32 en decimal.
  • En XML y XHTML, los caracteres se pueden expresar como referencias de carácter numérico hexadecimal utilizando la notación &#xcode;, por ejemplo representa el personaje U+2019 (la marca de citas simple derecha). Si no hay x el número es decimal (por es el mismo carácter).
  • En el estándar Unicode, un valor de carácter está representado con U+ seguido del valor hex, por ejemplo. U+20AC es el signo Euro (€).
  • Las referencias de color en HTML, CSS y X Window se pueden expresar con seis dígitos hexadecimales (dos cada uno para los componentes rojo, verde y azul, en ese orden) prefijados con #: blanco, por ejemplo, está representado como #FFFFFF. CSS también permite abreviaciones de 3-hexdigit con un hexdigit por componente: #FA3 abreviadas #FFAA33 (una naranja dorada: ).
  • En MIME (extensiones de correo electrónico) codificación presupuestable, los códigos de caracteres se escriben como pares hexadecimales prefijados con =: Espa=F1a es "España" (F1 es el código para ñ en el conjunto de caracteres ISO/IEC 8859-1).
  • En los idiomas de montaje de Intel-derived y Modula-2, hexadecimal se denota con un sufijo H o h: FFh o 05A3H. Algunas implementaciones requieren un cero líder cuando el primer dato hexadecimal no es un dígito decimal, por lo que uno escribiría 0FFh en lugar de FFh. Algunas otras implementaciones (como NASM) permiten números de estilo C (0x42).
  • Otros idiomas de montaje (6502, Motorola), Pascal, Delphi, algunas versiones de BASIC (Commodore), GameMaker Language, Godot y Forth use $ como prefijo: $5A3.
  • Algunos idiomas de montaje (Microchip) usan la notación H'ABCD' (para ABCD16). Del mismo modo, Fortran 95 utiliza Z'ABCD'.
  • Ada y VHDL adjuntan números hexadecimales en base "citas numéricas": 16#5A3#. Para las constantes de vectores de bits VHDL utiliza la notación x"5A3".
  • Verilog representa constantes hexadecimales en la forma 8'hFF, donde 8 es el número de bits en el valor y FF es la constante hexadecimal.
  • El lenguaje Smalltalk utiliza el prefijo 16r: 16r5A3
  • PostScript y la cáscara Bourne y sus derivados denotan hex con prefijo 16#: 16#5A3. Para PostScript, los datos binarios (como píxeles de imagen) se pueden expresar como pares hexadecimales consecutivos sin prefijo: AA213FD51B3801043FBC...
  • Lisp común utiliza los prefijos #x y #16r. La configuración de las variables *read-base* y *print-base* a 16 también se puede utilizar para cambiar el lector e impresora de un sistema de Lisp Común a la representación de número hexadecimal para números de lectura e impresión. Así, los números hexadecimales pueden ser representados sin el código #x o #16r prefijo, cuando la base de entrada o salida se ha cambiado a 16.
  • MSX BASIC, QuickBASIC, FreeBASIC y Visual Basic prefijo hexadecimal números con &H: &H5A3
  • BBC BASIC y Locomotive BASIC use & para Hex.
  • La serie TI-89 y 92 utiliza una serie 0h prefijo: 0h5A3
  • ALGOL 68 utiliza el prefijo 16r to denote hexadecimal numbers: 16r5a3. Los números binarios, cuaternarios (base-4) y octales se pueden especificar de forma similar.
  • El formato más común para hexadecimal en mainframes IBM (zSeries) y ordenadores de rango medio (IBM i) que ejecutan el sistema operativo tradicional (zOS, zVSE, zVM, TPF, IBM i) es X'5A3', y se utiliza en Assembler, PL/I, COBOL, JCL, scripts, comandos y otros lugares. Este formato era común en otros sistemas IBM (y ahora obsoletos). En ocasiones se utilizaron comillas en lugar de apostrofes.
  • Cualquier dirección IPv6 se puede escribir como ocho grupos de cuatro dígitos hexadecimales (a veces llamados hextets), donde cada grupo está separado por un colon (:). Esta, por ejemplo, es una dirección IPv6 válida: 2001:0db8:85a3:0000:0000:8a2e:0370:7334 o abreviado por la eliminación de ceros como 2001:db8:85a3::8a2e:370:7334 (Las direcciones IPv4 generalmente se escriben en decimal).
  • Los identificadores únicos a nivel mundial están escritos como treinta y dos dígitos hexadecimales, a menudo en agrupaciones desiguales separadas por el himen, por ejemplo 3F2504E0-4F89-41D3-9A0C-0305E82C3301.

Otros símbolos para 10–15 y conjuntos de símbolos en su mayoría diferentes

El uso de las letras A a F para representar los dígitos por encima del 9 no era universal en la historia temprana de las computadoras.

  • Durante la década de 1950, algunas instalaciones, como Bendix-14, favorecieron el uso de los dígitos 0 a 5 con un overline para denotar los valores 10-15 como 0, 1, 2, 3, 4 y 5.
  • Las computadoras SWAC (1950) y Bendix G-15 (1956) utilizaron las letras minúsculas u, v, w, x, Sí. y z para los valores 10 a 15.
  • Las computadoras ORDVAC e ILLIAC I (1952) (y algunos diseños derivados, por ejemplo, BRLESC) utilizaron las letras mayúsculas K, S, N, J, F y L para los valores 10 a 15.
  • El Librascopio LGP-30 (1956) utilizó las letras F, G, J, K, Q y W para los valores 10 a 15.
  • En el ordenador PERM (1956), los números hexadecimales fueron escritos como letras O para cero, A a N y P para 1 a 15. Muchas instrucciones de la máquina tenían códigos hex mnemónicos (A=add, M=multiply, L=load, F= punto fijo, etc.); los programas fueron escritos sin nombres de instrucción.
  • Los datos de Honeywell D-1000 (1957) utilizaron las letras minúsculas b, c, d, e, f, y g mientras que el Elbit 100 (1967) utilizó las letras mayúsculas B, C, D, E, F y G para los valores 10 a 15.
  • El Monrobot XI (1960) utilizó las letras S, T, U, V, W y X para los valores 10 a 15.
  • El computador NEC parametron NEAC 1103 (1960) utilizó las letras D, G, H, J, K (y posiblemente V) para los valores 10-15.
  • El Pacific Data Systems 1020 (1964) utilizó las letras L, C, A, S, M y D para los valores 10 a 15.
Propuesta de notación hexadecimal de Bruce Alan Martin
  • Bruce Alan Martin del Laboratorio Nacional Brookhaven consideró la elección de A-F "ridiculous". En una carta de 1968 al editor de la CACM, propuso un conjunto completamente nuevo de símbolos basados en los sitios de bits.
Bibi-binary
  • Nuevos símbolos numéricos y nombres fueron introducidos en la notación bibi-binaria de Boby Lapointe en 1968.
Propuesta de notación hexadecimal de Ronald O. Whitaker.
  • Ronald O. Whitaker de Rowco Engineering Co., en 1972, propuso una fuente triangular que permite "leer binaria directa" para "permitir tanto la entrada como la salida de computadoras sin respeto a las matrices de codificación".
  • Algunos chips de decodificador de siete segmentos (es decir, 74LS47) muestran una salida inesperada debido a la lógica diseñada sólo para producir 0-9 correctamente.

Representaciones verbales y digitales

Dado que no había números tradicionales para representar las cantidades de diez a quince, se volvieron a emplear letras alfabéticas como sustituto. La mayoría de los idiomas europeos carecen de palabras no decimales para algunos de los números del once al quince. Algunas personas leen números hexadecimales dígito a dígito, como un número de teléfono, o usan el alfabeto fonético de la OTAN, el alfabeto fonético conjunto del ejército y la marina, o un sistema ad-hoc similar. A raíz de la adopción del hexadecimal entre los programadores de IBM System/360, Magnuson (1968) sugirió una guía de pronunciación que daba nombres cortos a las letras hexadecimales, por ejemplo, "A" se pronunciaba "ann", B "bet", C "chris", etc. Otro sistema de nombres fue elaborado por Babb (2015), basado en una broma en Silicon Valle. Rogers (2007) publicó en línea otro sistema de nombres que intenta hacer que la representación verbal sea distinguible en cualquier caso, incluso cuando el número real no contiene números A–F. Los ejemplos se enumeran en las tablas a continuación.

Otros han propuesto usar las convenciones verbales del Código Morse para expresar dígitos hexadecimales de cuatro bits, con "dit" y "dah" representando 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.

Hexadecimal finger-counting scheme

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 de cero a 102310 en diez dedos. A la derecha se ilustra otro sistema para contar hasta FF16 (25510).

Magnuson (1968)
método de nombres
NúmeroPronunciación
AAnn
Bapuesta
Cchris
D#
EErnest
Fhelada
1Aannteen
A0No.
5B50-bet
A01CAnty christeen
1AD0annteen dotty
3A7Dtreinta y nueve setenta puntos
Rogers (2007)
método de nombres
NúmeroPronunciación
A10
B11
C12
Ddraze
Eeptwin
Ffim
10tex
11oneteek
1Ffimteek
50fiftek
C0Twelftek
100Hundrek
1000Yousek
3Ethirtek-eptwin
E1eptek-one
C4A12-hundrek-four-tek-ten
17431-thousek-seven-
- Vale.

Señales

El sistema hexadecimal puede expresar números negativos de la misma manera que en decimal: −2A para representar −4210 y así sucesivamente.

El hexadecimal también se puede usar para expresar los patrones de bits exactos que se usan en el procesador, por lo que una secuencia de dígitos hexadecimales puede representar un valor con signo o incluso un punto flotante. De esta forma, el número negativo −4210 se puede escribir como FFFF FFD6 en un registro de CPU de 32 bits (en complemento a dos), como C228 0000 en un registro de 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 hexadecimal

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 usa la letra P (o p, para "poder"), mientras que E (o e ) tiene un propósito similar en la notación E decimal. El número después de la P es decimal y representa el exponente binario. Aumentar el exponente por 1 se multiplica por 2, no por 16: 20p0 = 10p1 = 8p2 = 4p3 = 2p4 = 1.0p5. Por lo general, el número se normaliza para que los dígitos hexadecimales comiencen con 1. (el cero suele ser 0 sin P ).

Ejemplo: 1.3DEp42 representa 1.3DE16 × 24210.

La notación P es requerida por el estándar binario de coma flotante IEEE 754-2008 y se puede usar para literales de coma flotante en la edición C99 del lenguaje de programación C. 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 y Especificación única de Unix (IEEE Std 1003.1) estándar POSIX.

Conversión

Conversión binaria

La mayoría de las computadoras manipulan datos binarios, pero es difícil para los humanos trabajar con una gran cantidad de dígitos incluso para un número binario relativamente pequeño. Aunque la mayoría de las personas están familiarizadas con el sistema de base 10, es mucho más fácil asignar binario a hexadecimal que a decimal porque cada dígito hexadecimal se asigna a un número entero de bits (410). Este ejemplo convierte 11112 a base diez. Dado que cada posición en un número binario puede contener un 1 o un 0, su valor puede determinarse fácilmente por su posición desde la derecha:

  • 00012 = 110
  • 00102 = 210
  • 01002 = 410
  • 10002 = 810

Por lo tanto:

11112= 810 + 410 + 210 + 110
= 1510

Con poca práctica, la asignación de 11112 a F16 en un solo paso se vuelve fácil: vea la tabla en representación escrita. La ventaja de usar hexadecimal en lugar de decimal aumenta rápidamente con el tamaño del número. Cuando el número se vuelve grande, la conversión a decimal es muy tediosa. Sin embargo, cuando se asigna a hexadecimal, es trivial considerar la cadena binaria como grupos de 4 dígitos y asignar cada uno a un solo dígito hexadecimal.

Este ejemplo muestra la conversión de un número binario a decimal, asignando cada dígito al valor decimal y sumando los resultados.

(0101011110101101010010)2= 26214410 + 6553610 + 3276810 + 1638410 + 819210 + 204810 + 51210 + 25610 + 6410 + 1610 + 210
= 38792210

Compare esto con la conversión a hexadecimal, donde cada grupo de cuatro dígitos puede considerarse de forma independiente y convertirse directamente:

(0101011110101101010010)2=010111101011010100102
=5EB5216
=5EB5216

La conversión de hexadecimal a binario es igualmente directa.

Otras conversiones simples

Aunque el cuaternario (base 4) se usa poco, se puede convertir fácilmente hacia 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, 5 E B 5 216 = 11 32 23 11 024.

El sistema octal (base 8) también se puede convertir con relativa facilidad, aunque no tan trivialmente 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 a través de una conversión intermedia a binario seguida de la reagrupación de los dígitos binarios en grupos de tres o cuatro.

División-resto en la base de origen

Al igual que con todas las bases, existe un algoritmo simple para convertir una representación de un número a hexadecimal realizando operaciones de división de enteros y resto en la base de origen. En teoría, esto es posible desde cualquier base, pero para la mayoría de los humanos solo se puede manejar fácilmente con este método decimal y para la mayoría de las computadoras solo binario (que se puede convertir mediante métodos mucho más eficientes).

Sea d el número a representar en hexadecimal, y la serie hihi−1...h2h1 sean los dígitos hexadecimales que representan el número.

  1. i ← 1
  2. hi ← d mod 16
  3. d ← (d - hi) / 16
  4. Si d = 0 (serie de retorno hi) otro aumento i e ir al paso 2

"16" puede ser reemplazada con cualquier otra base que se desee.

La siguiente es una implementación de JavaScript del algoritmo anterior para convertir cualquier número a hexadecimal en representación de cadena. Su propósito es ilustrar el algoritmo anterior. Sin embargo, para trabajar con datos en serio, es mucho más recomendable trabajar con operadores bit a bit.

función toHex()d) {} Var r = d % 16; si ()d - r == 0) {} retorno toChar()r); } retorno toHex()d - r) / 16) + toChar()r);}función toChar()n) {} const alfa = "0123456789ABCDEF"; retorno alfa.charAt()n);}

Conversión mediante suma y multiplicación

Una tabla de multiplicación hexadecimal

También es posible realizar la conversión asignando a cada lugar en 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 (1110), 3 (310), A (10 10) y D (1310), y luego obtener el resultado final multiplicando cada representación decimal por 16p (p es la posición del dígito hexadecimal correspondiente, contando de derecha a izquierda, comenzando con 0). En este caso, tenemos que:

B3AD = (11 × 163) + (3 × 162) + (10 × 161) + (13 × 160)

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 raíces, incluido con frecuencia el hexadecimal.

En Microsoft Windows, la utilidad Calculadora se puede configurar en el modo Programador, lo que permite realizar conversiones entre radix 16 (hexadecimal), 10 (decimal), 8 (octal) y 2 (binario), las bases más utilizadas por los programadores. En el modo de programador, el teclado numérico en pantalla incluye los dígitos hexadecimales de la A a la F, que están activos cuando "Hex" es seleccionado. Sin embargo, en el modo hexadecimal, la Calculadora de Windows solo admite números enteros.

Aritmética elemental

Las operaciones elementales como la suma, la resta, la multiplicación y la división se pueden realizar indirectamente a través de 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.

Alternativamente, también se pueden realizar operaciones elementales directamente dentro del propio sistema hexadecimal, confiando en sus tablas de suma/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 con otros sistemas numéricos, el sistema hexadecimal se puede usar para representar números racionales, aunque las expansiones repetidas son comunes ya que dieciséis (1016) 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 (42), 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 sencillos triviales). Los dígitos recurrentes se exhiben cuando el denominador en términos más bajos tiene un factor primo que no se encuentra en la raíz; por lo tanto, cuando se usa la notación hexadecimal, todas las fracciones con denominadores que no son una potencia 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 proporción mayor se encuentra fuera de su rango de representación finita.

Todos los números racionales finitamente representables en hexadecimal también son finitamente representables 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 finitamente representables en las últimas bases son finitamente representables en hexadecimal. Por ejemplo, el decimal 0.1 corresponde a la representación infinita recurrente 0.19 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,062510 (un dieciseisavo) equivale a 0,116, 0,0912 y 0;3,4560 .

n Decimal
Principales factores: base, b = 10: 2, 5;
b − 1 = 9: 3
Hexadecimal
Principales factores: base, b = 1610 = 10: 2b) 1 = 1510 = F: 3, 5
Reciprocal Factores primas Representación posicional
(decimal)
Representación posicional
(hexadecimal)
Factores primas Reciprocal
2 1/2 20.50,821/2
3 1/3 30.3333... = 0.30.5555... = 0.531/3
4 1/4 20,250,421/4
5 1/5 50.20.351/5
6 1/6 2, 30.160.2A2, 31/6
7 1/7 70.1428570.24971/7
8 1/8 20.1250.221/8
9 1/9 30.10.1C731/9
10 1/10 2, 50.10.192, 51/A
11 1/11 110.090.1745DB1/B
12 1/12 2, 30,0830.152, 31/C
13 1/13 130.0769230.13BD1/D
14 1/14 2, 70,07142850.12492, 71/E
15 1/15 3, 50,060.13, 51/F
16 1/16 20,06250.121/10
17 1/17 170.05882352941176470.0F111/11
18 1/18 2, 30,050,0E382, 31/12
19 1/19 190.0526315789473684210.0D79435E5131/13
20 1/20 2, 50,050,0C2, 51/14
21 1/21 3, 70.0476190.0C33, 71/15
22 1/22 2, 110,0450,0BA2E82, B1/16
23 1/23 230.04347826086956521739130.0B21642C859171/17
24 1/24 2, 30,04160,0A2, 31/18
25 1/25 50,040.0A3D751/19
26 1/26 2, 130,03846150,09D82, D1/1A
27 1/27 30.0370.097B425ED31/1B
28 1/28 2, 70,035714280,09242, 71/1C
29 1/29 290.03448275862068965517241379310.08D3DCB1D1/1D
30 1/30 2, 3, 50,030,082, 3, 51/1E
31 1/31 310.0322580645161290.084211F1/1F
32 1/32 20,031250,0821/20
33 1/33 3, 110.030.07C1F3, B1/21
34 1/34 2, 170,029411764705882350,0782, 111/22
35 1/35 5, 70,02857140.0755, 71/23
36 1/36 2, 30,0270,071C2, 31/24

Números irracionales

La siguiente tabla muestra las expansiones de algunos números irracionales comunes en decimal y hexadecimal.

Número Representación posicional
Decimal Hexadecimal
√2 (la longitud de la diagonal de un cuadrado de unidad) 1.414213562373095048... 1.6A09E667F3BCD...
√3 (la longitud de la diagonal de un cubo de unidad) 1.732050807568877293... 1.BB67AE8584CAA...
√5 (la longitud de la diagonal de un rectángulo 1×2) 2.236067977499789696... 2.3C6EF372FE95...
φ (fi, la relación de oro = (1+5)/2) 1.618033988749894848... 1.9E3779B97F4A...
π (pi, la relación de circunferencia al diámetro de un círculo) 3.141592653589793238462643
383279502884197169399375105...
3.243F6A8885A308D313198A2E0
3707344A4093822299F31D008...
e (la base del logaritmo natural) 2.718281828459045235... 2.B7E151628AED2A6B...
τ (la constante Thue-Morse) 0.412454033640107597... 0.6996 9669 9669 6996...
γ (la diferencia límite entre la serie armónica y el logaritmo natural) 0.577215664901532860... 0.93C467E37DB0C7A4D1B...

Poderes

Las potencias de dos tienen expansiones muy simples en hexadecimal. Las primeras dieciséis potencias de dos se muestran a continuación.

2xValorValor (decimal)
2011
2122
2244
2388
2410Hex16dec
2520Hex32dec
2640Hex64dec
2780Hex128dec
28100Hex256dec
29200Hex512dec
2A (22)10dec)400Hex1024dec
2B (22)11dec)800Hex2048dec
2C (22)12dec)1000Hex4096dec
2D (22)13dec)2000Hex8192dec
2E (22)14dec)4000Hex16.384dec
2F (22)15dec)8000Hex32.768dec
210 (22)16dec)10000Hex65.536dec

Historia cultural

Las unidades de medida chinas tradicionales eran base-16. Por ejemplo, un jīn (斤) en el antiguo sistema equivale a dieciséis taels. El suanpan (ábaco chino) se puede utilizar para realizar cálculos hexadecimales como sumas y restas.

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 pronunciación y símbolos específicos para los números individuales. Algunas propuestas unifican medidas estándar para que sean múltiplos de 16. 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 named the Tonal System, with Sixteen to the Base, publicado en 1862. Nystrom, entre otras cosas, sugirió el tiempo hexadecimal, que subdivide un día en 16, para que haya 16 "horas" (o "10 tims", pronunciado tontim) en un día.

La palabra hexadecimal se registró por primera vez en 1952. Es macarónica en el sentido de que combina el griego ἕξ (hex) "seis" con latín -decimal. La alternativa totalmente latina sexadecimal (compárese con la palabra sexagesimal para la base 60) es más antigua y tiene un uso al menos ocasional desde finales del siglo XIX. Todavía está en uso 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 abreviatura sugestiva de sexo. Muchos idiomas occidentales desde la década de 1960 han adoptado términos equivalentes en formación a hexadecimal (por ejemplo, hexadecimal francés, esadecimale italiano, hexazecimal rumano i>, serbio хексадецимални, etc.) pero otros han introducido términos que sustituyen palabras nativas por "dieciséis" (por ejemplo, griego δεκαεξαδικός, islandés sextándakerfi, ruso шестнадцатеричной, etc.)

La terminología y la notación no se asentaron hasta finales de la década de 1960. Donald Knuth en 1969 argumentó que el término etimológicamente correcto sería senidenario, o posiblemente sedenario, un término en latín destinado a transmitir "agrupados por 16" modelado en binario, ternario y cuaternario etc. Según el argumento de Knuth, los términos correctos para la aritmética decimal y octal serían denary y octonary, respectivamente. Alfred B. Taylor usó senidenario en su trabajo de mediados del siglo XIX sobre bases numéricas alternativas, aunque rechazó la base 16 debido a su "incómodo número de dígitos".

La notación actual que usa las letras A a F se establece como el estándar de facto a partir de 1966, a raíz de la publicación del manual Fortran IV para IBM System/360, que (a diferencia de las variantes anteriores de Fortran) reconoce un estándar para ingresar constantes hexadecimales. Como se señaló anteriormente, NEC (1960) y The Pacific Data Systems 1020 (1964) utilizaron notaciones alternativas. El estándar adoptado por IBM parece haberse adoptado ampliamente en 1968, cuando Bruce Alan Martin en su carta al editor del CACM se queja de que

Con la ridícula elección de letras A, B, C, D, E, F como símbolos de número hexadecimal añadiendo a problemas ya problemáticos de distinguir números octal (o hex) de números decimales (o nombres variables), el tiempo se superpone para la reconsideración de nuestros símbolos número. Esto debería haber sido hecho antes de que las malas decisiones se congelen en un estándar de facto!

El argumento de Martin era que el uso de números del 0 al 9 en números no decimales "implica para nosotros un esquema de valor posicional en 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 los símbolos completamente nuevos podrían reflejar la naturaleza binaria del sistema. También argumentó que "reutilizar letras alfabéticas para dígitos numéricos representa un gigantesco paso atrás desde la invención de glifos distintos y no alfabéticos para números hace dieciséis siglos". (como números de Brahmi, y más tarde en un sistema de numeración hindú-árabe), y que los estándares ASCII recientes (ASA X3.4-1963 y USAS X3.4-1968) "debería haber conservado seis posiciones de la tabla de códigos después de los diez dígitos decimales -- en lugar de llenarlos innecesariamente con caracteres de puntuación" (":;<=>?") que podría haberse colocado en otro lugar entre los 128 puestos disponibles.

Base16 (codificación de transferencia)

Base16 (como nombre propio sin espacio) también puede referirse a una codificación de binario a texto que pertenece a la misma familia que Base32, Base58 y Base64.

En este caso, los datos se dividen en secuencias de 4 bits y cada valor (entre 0 y 15 inclusive) se codifica con uno de los 16 símbolos del juego de caracteres ASCII. Aunque se pueden usar 16 símbolos cualesquiera del conjunto de caracteres ASCII, en la práctica los dígitos ASCII '0'–'9' y las letras 'A'–'F' (o las minúsculas 'a'–'f') siempre se eligen para alinearse con la notación escrita estándar para números hexadecimales.

Hay varias ventajas de la codificación Base16:

  • La mayoría de los lenguajes de programación ya tienen instalaciones para analizar hexadecimal codificado ASCII
  • Siendo exactamente medio byte, 4-bits es más fácil de procesar que los 5 o 6 bits de Base32 y Base64 respectivamente
  • Los símbolos 0–9 y A–F son universales en notación hexadecimal, por lo que se entiende fácilmente de un vistazo sin necesidad de confiar en una tabla de búsqueda de símbolos
  • Muchas arquitecturas de CPU tienen instrucciones específicas que permiten el acceso a un medio byte (otros conocidos como un "nibble"), lo que hace más eficiente en hardware que Base32 y Base64

Las principales desventajas de la codificación Base16 son:

  • La eficiencia espacial es sólo 50%, ya que cada valor de 4 bits de los datos originales será codificado como un byte de 8 bits. En cambio, las codificaciones Base32 y Base64 tienen una eficiencia espacial de 63% y 75% respectivamente.
  • Posible complejidad añadida de tener que aceptar letras mayúsculas y minúsculas

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 de porcentaje de URL, donde un carácter se reemplaza con un signo de porcentaje "%" y su forma codificada en Base16. La mayoría de los lenguajes de programación modernos incluyen soporte directo para formatear y analizar números codificados en Base16.

Contenido relacionado

Software multiplataforma

Sistema de coordenadas esféricas

ML (lenguaje de programación)

Más resultados...
Tamaño del texto:
undoredo
format_boldformat_italicformat_underlinedstrikethrough_ssuperscriptsubscriptlink
save