En matemáticas y computación , el sistema numérico hexadecimal (también en base 16 o hexadecimal ) es un sistema numérico posicional que representa números usando una base (base) de 16. A diferencia de la forma común de representar números usando 10 símbolos, el hexadecimal usa 16 símbolos distintos, la mayoría de las veces los símbolos "0" - "9" para representar los valores de 0 a 9, y "A" - "F" (o alternativamente "a" - "f") para representar los valores de 10 a 15.
Los diseñadores y programadores de sistemas informáticos utilizan ampliamente los números hexadecimales porque proporcionan una representación amigable para los humanos de valores codificados en binario . Cada dígito hexadecimal representa cuatro bits (dígitos binarios), también conocido como nibble (o nybble), que es medio byte . Por ejemplo, un solo byte 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, se suele utilizar un subíndice para especificar la base. Por ejemplo, el valor decimal51,402 se expresaría en hexadecimal como C8CA 16 . En programación, se utilizan una serie de notaciones para denotar números hexadecimales, que generalmente implican un prefijo o sufijo. El prefijo 0x
se usa en C y lenguajes de programación relacionados, lo que denotaría este valor como 0xC8CA
.
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 casi todos los usos modernos, 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 habituales.
No existe una convención universal para usar minúsculas o mayúsculas, por lo que cada uno es prevalente o preferido en entornos particulares según los estándares o la convención de la comunidad; incluso se utiliza a menudo el caso mixto. Las pantallas de siete segmentos utilizan AbCdEF de mayúsculas y minúsculas para generar dígitos que se puedan distinguir entre sí.
Existe cierta estandarización del uso de espacios (en lugar de comas u otro signo de puntuación) para separar 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 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 0a
Distinguir del 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 a su vez en decimal) puede dar la base explícitamente: 159 10 es el decimal 159; 159 16 es hexadecimal 159, que es igual a 345 10 . Algunos autores prefieren un subíndice de texto, como 159 decimal y 159 hexadecimal , o 159 dy 159 h .
Donald Knuth introdujo el uso de un tipo de letra en particular para representar una raíz particular en su libro The TeXbook . [1] 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 de computadoras, han surgido una variedad de métodos:
- Los shells Unix (y relacionados), el lenguaje ensamblador de AT&T 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 hexadecimal:0x5A3
. Las constantes de caracteres y cadenas pueden expresar códigos de caracteres en hexadecimal con el prefijo\x
seguido de dos dígitos hexadecimales:'\x1B'
representa el carácter de control Esc ;"\x1B[0m\x1B[25;1H"
es una cadena que contiene 11 caracteres con dos caracteres Esc incrustados. [2] Para generar un entero como hexadecimal con la familia de funciones printf , se utiliza el código de conversión de formato%X
o%x
. - En las URI (incluidas las URL ), los códigos de caracteres se escriben como pares hexadecimales con el prefijo
%
:http://www.example.com/name%20with%20spaces
donde%20
es el código para el carácter de espacio (en blanco) , el punto del código ASCII 20 en hexadecimal, 32 en decimal. - En XML y XHTML , los caracteres se pueden expresar como referencias de caracteres numéricos hexadecimales utilizando la notación , por ejemplo, representa el carácter U + 2019 (la comilla simple derecha). Si no hay, el número es decimal (por lo tanto, es el mismo carácter). [3]
ode;
’
x
’
- En el estándar Unicode , un valor de carácter se representa
U+
seguido por el valor hexadecimal, por ejemplo,U+20AC
es el signo de 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) con el prefijo
#
: blanco, por ejemplo, se representa como#FFFFFF
. [4] CSS también permite abreviaturas de 3 dígitos hexadecimales con un dígito hexadecimal por componente: # FA3 abrevia # FFAA33 (una naranja dorada: ). - En la codificación MIME (extensiones de correo electrónico) entre comillas e imprimibles , los códigos de caracteres se escriben como pares hexadecimales con el prefijo
=
:Espa=F1a
es "España" (F1 es el código para ñ en el juego de caracteres ISO / IEC 8859-1). [5] ) - En los lenguajes ensambladores derivados de Intel y Modula-2, [6] hexadecimal se denota con un sufijo H o h :
FFh
o05A3H
. Algunas implementaciones requieren un cero a la izquierda cuando el primer carácter de dígito hexadecimal no es un dígito decimal, por lo que se escribiría en0FFh
lugar deFFh
- Otros lenguajes ensambladores ( 6502 , Motorola ), Pascal , Delphi , algunas versiones de BASIC ( Commodore ), GameMaker Idioma , Godot y Forth utilizar
$
como prefijo:$5A3
. - Algunos lenguajes ensambladores (Microchip) usan la notación
H'ABCD'
(para ABCD 16 ). De manera similar, Fortran 95 usa Z'ABCD '. - Ada y VHDL encierran los números hexadecimales en base "comillas numéricos":
16#5A3#
. Para las constantes de vector de bits, VHDL usa la notaciónx"5A3"
. [7] - 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 usa el prefijo
16r
:16r5A3
- PostScript y el shell Bourne y sus derivados significan 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
... - Common Lisp usa los prefijos
#x
y#16r
. La configuración de las variables * read-base * [8] y * print-base * [9] en 16 también se puede usar para cambiar el lector y la impresora de un sistema Common Lisp a representación numérica hexadecimal para leer e imprimir números. Por lo tanto, 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 , [10] QuickBASIC , FreeBASIC y Visual Basic prefijan números hexadecimales con
&H
:&H5A3
- BBC BASIC y Locomotive BASIC uso
&
para hex. [11] - Las series TI-89 y 92 usan un
0h
prefijo:0h5A3
- ALGOL 68 utiliza el prefijo
16r
a los números hexadecimales Significan:16r5a3
. Los números binarios, cuaternarios (base 4) y octales se pueden especificar de manera similar. - El formato más común para hexadecimal en mainframes IBM ( zSeries ) y computadoras de rango medio ( IBM System i ) que ejecutan el sistema operativo tradicional ( zOS , zVSE , zVM , TPF , IBM i ) es
X'5A3'
y se usa en Assembler, PL / I , COBOL , JCL , scripts, comandos y otros lugares. Este formato también era común en otros sistemas IBM (y ahora obsoletos). De vez en cuando se usaban comillas en lugar de apóstrofos. - 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 (
:
). Esta, por ejemplo, es una dirección IPv6 válida:2001:0db8:85a3:0000:0000:8a2e:0370:7334
o abreviada eliminando ceros 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 agrupaciones desiguales separadas por guiones, por ejemplo
3F2504E0-4F89-41D3-9A0C-0305E82C3301
.
Otros símbolos para 10-15
El uso de las letras de la A a la F para representar los dígitos por encima de 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 del 0 al 5 con una línea superior para denotar los valores 10-15 como 0 , 1 , 2 , 3 , 4 y 5 .
- Las computadoras SWAC (1950) [12] y Bendix G-15 (1956) [13] [12] utilizaron las letras minúsculas u , v , w , x , y y z para los valores de 10 a 15.
- La computadora ILLIAC I (1952) utilizó las letras mayúsculas K , S , N , J , F y L para los valores de 10 a 15. [14] [12]
- El Librascope LGP-30 (1956) utilizó las letras F , G , J , K , Q y W para los valores de 10 a 15. [15] [12]
- El Honeywell Datamatic D-1000 (1957) usó las letras minúsculas b , c , d , e , f y g mientras que el Elbit 100 (1967) usó las letras mayúsculas B , C , D , E , F y G para los valores 10 a 15. [12]
- El Monrobot XI (1960) utilizó las letras S , T , U , V , W y X para los valores de 10 a 15. [12]
- La computadora parametrón NEC NEAC 1103 (1960) usó las letras D , G , H , J , K (y posiblemente V ) para los valores 10-15. [dieciséis]
- El Pacific Data Systems 1020 (1964) utilizó las letras L , C , A , S , M y D para los valores de 10 a 15. [12]
- Boby Lapointe introdujo nuevos símbolos numéricos y nombres en la notación Bibi-binaria en 1968. Esta notación no se hizo muy popular.
- Bruce Alan Martin, del Laboratorio Nacional de Brookhaven, consideró la elección de A – F "ridícula". En una carta de 1968 al editor del CACM , propuso un conjunto de símbolos completamente nuevo basado en las ubicaciones de los bits, que no obtuvo mucha aceptación. [17]
- Algunos chips decodificadores de pantalla de siete segmentos muestran el resultado aleatorio de una lógica diseñada solo para producir 0-9 correctamente.
Representaciones verbales y digitales
No hay números tradicionales para representar las cantidades de diez a quince (las letras se utilizan como sustituto) y la mayoría de los idiomas europeos carecen de nombres no decimales para los números superiores a diez. Aunque el inglés tiene nombres para varias potencias no decimales ( par para la primera potencia binaria , puntuación para la primera potencia vigesimal , docena , bruto y gran bruto para las tres primeras potencias duodecimales ), ningún nombre en inglés describe las potencias hexadecimales (decimal 16 , 256, 4096, 65536, ...). 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 Ejército / Armada o un sistema ad-hoc similar . A raíz de la adopción del hexadecimal entre los programadores de IBM System / 360 , Magnuson (1968) [18] sugirió una guía de pronunciación que daba nombres cortos a las letras del hexadecimal - por ejemplo, "A" se pronunciaba "ann", B " bet ", C" chris ", etc. [18] Otro sistema de nomenclatura fue elaborado por Babb (2015), a partir de una serie de televisión como una broma. [19] Otro sistema de nomenclatura fue publicado en línea por Rogers (2007) [20] 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 siguientes.
Se han ideado sistemas de conteo con dígitos tanto para binarios como para hexadecimales. Arthur C. Clarke sugirió usar cada dedo como un bit de encendido / apagado, lo que permite contar los dedos de cero a 1023 10 en diez dedos. [21] Otro sistema para contar hasta FF 16 (255 10 ) se ilustra a la derecha.
Número | Pronunciación |
---|---|
A | Ana |
B | apuesta |
C | chris |
D | punto |
mi | Ernesto |
F | escarcha |
1A | diecisiete |
A0 | annty |
5B | cincuenta apuesta |
A01C | annty christeen |
1AD0 | diecisiete loco |
3A7D | treinta y setenta puntos |
Número | Pronunciación |
---|---|
A | diez |
B | once |
C | doce |
D | empapar |
mi | eptwin |
F | fim |
10 | Texas |
11 | oneteek |
1F | fimteek |
50 | Fiftek |
C0 | twelftek |
100 | hundrek |
1000 | thousek |
3E | trecek-eptwin |
E1 | eptek-uno |
C4A | doce-cien-catorce-diez |
1743 | uno-mil-siete -cien-catorce-tres |
Señales
El sistema hexadecimal puede expresar números negativos de la misma manera que en decimal: −2A para representar −42 10 y así sucesivamente.
El hexadecimal también se puede utilizar para expresar los patrones de bits exactos que se utilizan en el procesador , por lo que una secuencia de dígitos hexadecimales puede representar un valor de coma flotante o con signo . 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 FPU de 64 bits register (en el estándar de coma flotante IEEE ).
Notación exponencial hexadecimal
Así como los números decimales se pueden representar en notación exponencial , también lo pueden hacer los números hexadecimales. Por convención, la letra P (o P , por "poder") representa veces dos elevado a la potencia de , mientras que E (o e ) sirve a un propósito similar en decimal como parte de la notación E . El número después de la P es decimal y representa el exponente binario . Incrementar el exponente por 1 multiplica por 2, no 16. 10.0p1 = 8.0p2 = 4.0p3 = 2.0p4 = 1.0p5. Por lo general, el número se normaliza de modo que el primer dígito hexadecimal sea 1 (a menos que el valor sea exactamente 0).
Ejemplo: 1.3DEp42 representa 1.3DE 16 × 2 42 10 .
La notación exponencial hexadecimal es requerida por el estándar de coma flotante binaria IEEE 754-2008 . Esta notación se puede utilizar para los literales de punto flotante en el C99 edición del lenguaje de programación C . [22] Utilizando los especificadores de conversión % a o % A , esta notación se puede producir mediante implementaciones de la familia de funciones printf siguiendo la especificación C99 [23] y el estándar POSIX de la Especificación Única de Unix (IEEE Std 1003.1) . [24]
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 los humanos están familiarizados con el sistema de base 10, es mucho más fácil mapear binario a hexadecimal que a decimal porque cada dígito hexadecimal mapea a un número entero de bits (4 10 ). Este ejemplo convierte 1111 2 en 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:
- 0001 2 = 1 10
- 0010 2 = 2 10
- 0100 2 = 4 10
- 1000 2 = 8 10
Por lo tanto:
1111 2 | = 8 10 + 4 10 + 2 10 + 1 10 |
= 15 10 |
Con poca práctica, el mapeo de 1111 2 a F 16 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 aumenta, 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, mapeando cada dígito al valor decimal y sumando los resultados.
(01011110101101010010) 2 | = 262144 10 + 65536 10 + 32768 10 + 16384 10 + 8192 10 + 2048 10 + 512 10 + 256 10 + 64 10 + 16 10 + 2 10 |
= 387922 10 |
Compare esto con la conversión a hexadecimal, donde cada grupo de cuatro dígitos se puede considerar de forma independiente y convertir directamente:
(01011110101101010010) 2 | = | 0101 | 1110 | 1011 | 0101 | 0010 2 |
= | 5 | mi | B | 5 | 2 16 | |
= | 5EB52 16 |
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 2 16 = 11 32 23 11 02 4 .
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 mediante una conversión intermedia a binaria seguida de la reagrupación de los dígitos binarios en grupos de tres o cuatro.
Resto de la división 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 en 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 seres humanos solo el decimal y para la mayoría de las computadoras solo el binario (que se puede convertir 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 sean 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, incremente i y vaya al paso 2
"16" se puede reemplazar 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 la 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 ; if ( d - r == 0 ) { volver a Char ( r ); } volver aHex (( d - r ) / 16 ) + toChar ( r ); }función toChar ( n ) { const alpha = "0123456789ABCDEF" ; retorno alfa . charAt ( n ); }
Conversión mediante suma y multiplicación
También es posible realizar la conversión asignando a cada lugar en la base fuente 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, uno 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. El resultado es multiplicar cada representación decimal por 16 p ( siendo p la posición del dígito hexadecimal correspondiente, contando de derecha a izquierda, comenzando con 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
La mayoría de los sistemas informáticos modernos con interfaces gráficas de usuario proporcionan una utilidad de calculadora incorporada capaz de realizar conversiones entre los distintos radicales y, en la mayoría de los casos, también incluirían el hexadecimal.
En Microsoft Windows , la utilidad Calculadora se puede configurar en modo Científico (llamado modo Programador en algunas versiones), que permite conversiones entre la base 16 (hexadecimal), 10 (decimal), 8 ( octal ) y 2 ( binario ), las bases más comúnmente utilizado por los programadores. En el modo científico, el teclado numérico en pantalla incluye los dígitos hexadecimales de la A a la F, que están activos cuando se selecciona "Hex". Sin embargo, en modo hexadecimal, la Calculadora de Windows solo admite números enteros.
Aritmética elemental
Las operaciones elementales tales como suma, resta, multiplicación y división se pueden realizar indirectamente mediante la conversión a un sistema numérico alternativo , como el sistema decimal comúnmente utilizado 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 sistema hexadecimal en sí, confiando en sus tablas de suma / multiplicación y sus correspondientes algoritmos estándar, como la división larga y el algoritmo de resta tradicional. [25]
Numeros reales
Numeros racionales
Al igual que con otros sistemas numéricos, el sistema hexadecimal puede usarse para representar números racionales , aunque las expansiones repetidas son comunes ya que dieciséis (10 16 ) tiene un solo factor primo; dos.
Para cualquier base, 0,1 (o "1/10") siempre equivale 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 (excepto los triviales de un solo dígito). 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 base; 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, sólo 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 repetida infinita 0.1 9 en hexadecimal. Sin embargo, hexadecimal es más eficiente que duodecimal y 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 .
norte | Factores primos decimales de base, b = 10: 2 , 5 ; b - 1 = 9: 3 ; b + 1 = 11:11 | Factores primos hexadecimales de base, b = 16 10 = 10: 2 ; b - 1 = 15 10 = F: 3, 5 ; b + 1 = 17 10 = 11:11 | ||||
---|---|---|---|---|---|---|
Fracción | Factores primos | Representación posicional | Representación posicional | Factores primos | Fracción (1 / n) | |
2 | 1/2 | 2 | 0,5 | 0,8 | 2 | 1/2 |
3 | 1/3 | 3 | 0. 3333 ... = 0. 3 | 0. 5555 ... = 0. 5 | 3 | 1/3 |
4 | 1/4 | 2 | 0,25 | 0.4 | 2 | 1/4 |
5 | 1/5 | 5 | 0,2 | 0. 3 | 5 | 1/5 |
6 | 1/6 | 2 , 3 | 0,1 6 | 0,2 A | 2 , 3 | 1/6 |
7 | 1/7 | 7 | 0. 142857 | 0. 249 | 7 | 1/7 |
8 | 1/8 | 2 | 0,125 | 0,2 | 2 | 1/8 |
9 | 1/9 | 3 | 0, 1 | 0. 1C7 | 3 | 1/9 |
10 | 1/10 | 2 , 5 | 0,1 | 0,1 9 | 2 , 5 | 1 / A |
11 | 1/11 | 11 | 0. 09 | 0. 1745D | B | 1 / B |
12 | 1/12 | 2 , 3 | 0,08 3 | 0,1 5 | 2 , 3 | 1 / C |
13 | 1/13 | 13 | 0. 076923 | 0. 13B | D | 1 / D |
14 | 14/1 | 2 , 7 | 0,0 714285 | 0,1 249 | 2 , 7 | 1 / E |
15 | 15/1 | 3 , 5 | 0,0 6 | 0, 1 | 3 , 5 | 1 / F |
dieciséis | 1/16 | 2 | 0.0625 | 0,1 | 2 | 1/10 |
17 | 17/1 | 17 | 0. 0588235294117647 | 0. 0F | 11 | 1/11 |
18 | 18/1 | 2 , 3 | 0,0 5 | 0.0 E38 | 2 , 3 | 1/12 |
19 | 19/1 | 19 | 0. 052631578947368421 | 0. 0D79435E5 | 13 | 1/13 |
20 | 1/20 | 2 , 5 | 0,05 | 0,0 C | 2 , 5 | 14/1 |
21 | 1/21 | 3 , 7 | 0. 047619 | 0. 0C3 | 3 , 7 | 15/1 |
22 | 1/22 | 2 , 11 | 0,0 45 | 0.0 BA2E8 | 2 , B | 1/16 |
23 | 1/23 | 23 | 0. 0434782608695652173913 | 0. 0B21642C859 | 17 | 17/1 |
24 | 24/1 | 2 , 3 | 0,041 6 | 0,0 A | 2 , 3 | 18/1 |
25 | 1/25 | 5 | 0,04 | 0. 0A3D7 | 5 | 19/1 |
26 | 26/1 | 2 , 13 | 0,0 384615 | 0.0 9D8 | 2 , D | 1 / 1A |
27 | 1/27 | 3 | 0. 037 | 0. 097B425ED | 3 | 1 / 1B |
28 | 1/28 | 2 , 7 | 0,03 571428 | 0,0 924 | 2 , 7 | 1 / 1C |
29 | 1/29 | 29 | 0. 0344827586206896551724137931 | 0. 08D3DCB | 1D | 1 / 1D |
30 | 30/1 | 2 , 3 , 5 | 0,0 3 | 0,0 8 | 2 , 3 , 5 | 1 / 1E |
31 | 1/31 | 31 | 0. 032258064516129 | 0. 08421 | 1F | 1 / 1F |
32 | 1/32 | 2 | 0.03125 | 0,08 | 2 | 1/20 |
33 | 1/33 | 3 , 11 | 0. 03 | 0. 07C1F | 3 , B | 1/21 |
34 | 1/34 | 2 , 17 | 0,0 2941176470588235 | 0,0 78 | 2 , 11 | 1/22 |
35 | 1/35 | 5 , 7 | 0,0 285714 | 0. 075 | 5 , 7 | 1/23 |
36 | 1/36 | 2 , 3 | 0,02 7 | 0.0 71C | 2 , 3 | 24/1 |
Numeros 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 unitario ) | 1.414 213 562 373 095 048 ... | 1.6A09E667F3BCD ... |
√ 3 (la longitud de la diagonal de un cubo unitario ) | 1.732 050 807 568 877 293 ... | 1.BB67AE8584CAA ... |
√ 5 (la longitud de la diagonal de un rectángulo de 1 × 2 ) | 2.236 067 977 499 789 696 ... | 2.3C6EF372FE95 ... |
φ (phi, la proporción áurea = (1+ √ 5 ) / 2 ) | 1,618 033 988 749 894 848 ... | 1.9E3779B97F4A ... |
π (pi, la relación entre la circunferencia y el diámetro de un círculo) | 3.141 592 653 589 793 238 462 643 383 279 502 884 197 169 399 375 105 ... | 3.243F6A8885A308D313198A2E0 3707344A4093822299F31D008 ... |
e (la base del logaritmo natural ) | 2.718 281 828 459 045 235 ... | 2.B7E151628AED2A6B ... |
τ (la constante de Thue-Morse ) | 0,412 454 033 640 107 597 ... | 0,6996 9669 9669 6996 ... |
γ (la diferencia límite entre la serie armónica y el logaritmo natural) | 0,577 215 664 901 532 860 ... | 0.93C467E37DB0C7A4D1B ... |
Potestades
Las potencias de dos tienen expansiones muy simples en hexadecimal. Las primeras dieciséis potencias de dos se muestran a continuación.
2 x | Valor | Valor (decimal) |
---|---|---|
2 0 | 1 | 1 |
2 1 | 2 | 2 |
2 2 | 4 | 4 |
2 3 | 8 | 8 |
2 4 | 10 hexadecimales | 16 dic |
2 5 | 20 hexadecimales | 32 dic |
2 6 | 40 hexadecimales | 64 dic |
2 7 | 80 hexadecimales | 128 dic |
2 8 | 100 hexadecimales | 256 dic |
2 9 | 200 hexadecimales | 512 dic |
2 A (2 10 dec ) | 400 hexadecimales | 1024 dic |
2 B (2 11 dic ) | 800 hex | 2048 dic |
2 C (2 12 dic ) | 1000 hexadecimales | 4096 dic |
2 D (2 13 dic ) | 2000 hexadecimales | 8192 dic |
2 E (2 14 dic ) | 4000 hexadecimales | 16,384 dic |
2 F (2 15 dic ) | 8000 hexadecimales | 32,768 dic |
2 10 (2 16 dic ) | 10000 hexadecimal | 65.536 dic |
Cultural
Etimología
La palabra hexadecimal se compone de hexa- , derivado del griego ἕξ (hex) para seis , y -decimal , derivado del latín para décimo . Webster's Third New International en línea deriva hexadecimal como una alteración del sexadecimal latino (que aparece en la documentación anterior de Bendix). La fecha más antigua atestiguada para hexadecimal en Merriam-Webster Collegiate en línea es 1954, lo que la coloca sin peligro en la categoría de vocabulario científico internacional (ISV). Es común en ISV mezclar formas combinadas griegas y latinas libremente. La palabra sexagesimal (para base 60) conserva el prefijo latino. Donald Knuth ha señalado que el término etimológicamente correcto es senidenario (o posiblemente, sedenario ), del término latino para agrupar por 16 . (Los términos binario , ternario y cuaternario son de la misma construcción latina, y los términos etimológicamente correctos para la aritmética decimal y octal son denario y octonario , respectivamente). [26] Alfred B. Taylor usó senidenario en su trabajo de mediados del siglo XIX sobre alternativas. bases numéricas, aunque rechazó la base 16 debido a su "número incómodo de dígitos". [27] [28] Schwartzman señala que la forma esperada de la expresión latina habitual sería sexadecimal , pero los piratas informáticos se verían tentados a acortar esa palabra a sexo . [29] El término griego etimológicamente correcto sería hexadecadic / ἑξαδεκαδικός / hexadekadikós (aunque en griego moderno , decahexadic / δεκαεξαδικός / dekaexadikos se usa más comúnmente).
Uso en la cultura china
Las unidades de medida tradicionales chinas eran base-16. Por ejemplo, un jīn (斤) en el sistema antiguo equivale a dieciséis taels . El suanpan ( ábaco chino ) se puede utilizar para realizar cálculos hexadecimales como sumas y restas. [30]
Sistema de numeración primaria
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 números individuales. [31] Algunas propuestas unifican medidas estándar para que sean múltiplos de 16. [32] [33] [34]
Un ejemplo de medidas estándar unificadas es el tiempo hexadecimal , que subdivide un día entre 16 para que haya 16 "hexhoras" en un día. [34]
Base16 (codificación de transferencia)
Base16 (como nombre propio sin espacios) también puede referirse a una codificación binaria 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 utilizando 16 símbolos del juego de caracteres ASCII . Aunque se pueden utilizar 16 símbolos del conjunto de caracteres ASCII, en la práctica siempre se eligen los dígitos ASCII '0' - '9' y las letras 'A' - 'F' (o las minúsculas 'a' - 'f') 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 facilidades para analizar hexadecimal codificado en ASCII
- Al ser 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 AF son universales en notación hexadecimal, por lo que se entienden fácilmente de un vistazo sin necesidad de depender 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 principales desventajas de la codificación Base16 son:
- La eficiencia del espacio es solo del 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 75% respectivamente.
- Posible complejidad añadida de tener que aceptar letras mayúsculas y minúsculas
El soporte para 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 directamente soporte para formatear y analizar números codificados en Base16.
Ver también
- Base32 , Base64 (esquemas de codificación de contenido)
- Tiempo hexadecimal
- Punto flotante hexadecimal de IBM
- Editor hexadecimal
- Volcado hexagonal
- Fórmula de Bailey-Borwein-Plouffe (BBP)
- Hexspeak
Referencias
- ^ Donald E. Knuth. El TeXbook ( Computadoras y tipografía , Volumen A). Reading, Massachusetts: Addison-Wesley, 1984. ISBN 0-201-13448-9 . El código fuente del libro en TeX Archivado 2007-09-27 en Wayback Machine (y un conjunto requerido de macros CTAN.org ) está disponible en línea en CTAN .
- ^ La cadena
"\x1B[0m\x1B[25;1H"
especifica la secuencia de caracteres Esc [0 m Esc [2 5; 1 H Nul . Estas son las secuencias de escape utilizadas en un terminal ANSI que restablecen el juego de caracteres y el color, y luego mueven el cursor a la línea 25. - ^ "El estándar Unicode, versión 7" (PDF) . Unicode . Consultado el 28 de octubre de 2018 .
- ^ "Explicación de colores web hexadecimales" . Archivado desde el 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 . Consultado el 26 de junio de 2019 .
- ^ "Modula-2 - Vocabulario y representación" . Modula -2 . Consultado el 1 de noviembre de 2015 .
- ^ "Introducción a los tipos de datos VHDL" . Tutorial de FPGA . Consultado el 21 de agosto de 2020 .
- ^ "Variable * base de lectura * en Common Lisp" . CLHS .
- ^ "Variable * print-base * en Common Lisp" . CLHS .
- ^ Se acerca MSX - Parte 2: ¡Dentro de MSX Compute! , número 56, enero de 1985, p. 52
- ^ Los programas BBC BASIC no son totalmente portables a Microsoft BASIC (sin modificación) ya que este último toma
&
como prefijovalores octales . (Microsoft BASIC usa principalmente&O
para prefijar octal, y usa&H
para prefijar hexadecimal, pero el ampersand solo produce una interpretación predeterminada como un prefijo octal. - ^ a b c d e f g Savard, John JG (2018) [2005]. "Aritmética informática" . quadibloc . Los primeros días del hexadecimal. Archivado desde el original el 16 de julio de 2018 . Consultado el 16 de julio de 2018 .
- ^ "2.1.3 Notación sexadecimal". Manual de referencia del programador de G15D (PDF) . Los Ángeles, CA, EE.UU .: Bendix Computer , División de Bendix Aviation Corporation . pag. 4. Archivado (PDF) desde el original el 1 de junio de 2017 . Consultado 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 (de cero a quince). Al asignar un símbolo a cada una de estas combinaciones llegamos a una notación llamada sexadecimal (generalmente hexadecimal en la conversación porque nadie quiere abreviar sexo). 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 diferentes caracteres alfabéticos para estos últimos seis dígitos.
- ^ Gill, S .; Neagher, RE; Muller, DE; Nash, JP; Robertson, JE; Shapin, T .; Whesler, DJ (1 de septiembre de 1956). Nash, JP (ed.). "Programación ILLIAC - Una guía para la preparación de problemas para su solución por la computadora digital de la Universidad de Illinois" (PDF) . bitsavers.org (Cuarta impresión. Ed. revisada y corregida). Urbana, Illinois, EE.UU .: Laboratorio de Computación Digital, Graduate College, Universidad de Illinois . págs. 3–2. Archivado (PDF) desde el original el 31 de mayo de 2017 . Consultado el 18 de diciembre de 2014 .
- ^ ORYAL PRECISION Ordenador Electrónico LGP - 30 MANUAL DE PROGRAMACIÓN . Port Chester, Nueva York: Royal McBee Corporation . Abril de 1957. Archivado desde el original el 31 demayode 2017 . Consultado el 31 de mayo de 2017 .(NB. Esta secuencia algo extraña fue de los siguientes seis códigos de teclado numérico secuenciales en el código de caracteres de 6 bits del LGP-30 ).
- ^ Computadora digital NEC Parametron tipo NEAC-1103 (PDF) . Tokio, Japón: Nippon Electric Company Ltd. 1960. Cat. Nº 3405-C. Archivado (PDF) desde el original el 31 de mayo de 2017 . Consultado el 31 de mayo de 2017 .
- ^ a b Martin, Bruce Alan (octubre de 1968). "Cartas al editor: en notación binaria". Comunicaciones de la ACM . Associated Universities Inc. 11 (10): 658. doi : 10.1145 / 364096.364107 .
- ^ a b c Magnuson, Robert A. (enero de 1968). "Una guía de pronunciación hexadecimal". Datamación . Vol. 14 no. 1. p. 45.
- ^ Babb, Tim (2015). "Cómo pronunciar hexadecimal" . Bzarg . Consultado el 1 de enero de 2021 .
- ^ a b Rogers, SR (2007). "Palabras de números hexadecimales" . Intuitor . Consultado el 26 de agosto de 2019 .
- ^ Clarke, Arthur; Pohl, Frederik (2008). El último teorema . Ballantine. pag. 91 . ISBN 978-0007289981.
- ^ "ISO / IEC 9899: 1999 - Lenguajes de programación - C" . ISO . Iso.org. 2011-12-08 . Consultado el 8 de abril de 2014 .
- ^ "Justificación 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) desde el original el 6 de junio de 2016 . Consultado el 17 de octubre de 2010 .
- ^ El IEEE y The Open Group (2013) [2001]. "dprintf, fprintf, printf, snprintf, sprintf - impresión de salida formateada" . Especificaciones básicas de Open Group (Edición 7, IEEE Std 1003.1, 2013 ed.). Archivado desde el original el 21 de junio de 2016 . Consultado el 21 de junio de 2016 .
- ^ "La guía definitiva de matemáticas superiores a la división larga y sus variantes - para enteros" . Bóveda de matemáticas . 2019-02-24 . Consultado el 26 de junio de 2019 .
- ^ 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, octava sesión anual, Boston, 15 de septiembre de 1859. Consulte las páginas 33 y 41.
- ^ Alfred B. Taylor, "Numeración octonaria y su aplicación a un sistema de pesos y medidas", Proc Amer. Phil. Soc. Vol XXIV , Filadelfia, 1887; páginas 296-366. Consulte las páginas 317 y 322.
- ^ Schwartzman, S. (1994). Las palabras de las matemáticas: un diccionario etimológico de términos matemáticos utilizados en inglés . ISBN 0-88385-511-9 .
- ^ "算盤 Suma y resta hexadecimal en un ábaco chino" . totton.idirect.com . Consultado el 26 de junio de 2019 .
- ^ "Propuesta de símbolo hexadecimal base 4 ^ 2" . Hauptmech .
- ^ "Sede de Intuitor Hex" . Intuitor . Consultado el 28 de octubre de 2018 .
- ^ Niemietz, Ricardo Cancho (21 de octubre de 2003). "Una propuesta para la adición de los seis dígitos hexadecimales (AF) a Unicode" . Estandarización DKUUG . Consultado el 28 de octubre de 2018 .
- ^ a b Nystrom, John William (1862). Proyecto de Nuevo Sistema de Aritmética, Peso, Medida y Monedas: Se propone llamar Sistema Tonal, con Dieciséis a la Base . Filadelfia: Lippincott.