¿Qué es el sistema hexadecimal?

13

¿Qué es el sistema hexadecimal y por qué se usa tanto en informática? Sé que las computadoras usan 0s y 1s para almacenar datos, entonces, ¿cómo es que usamos hexadecimal?

Justin Krejcha
fuente
13
Si no está fuera del tema, ¿cómo es que una pregunta tan básica no es un duplicado 5 años después del inicio de Super User?
Peter Mortensen
3
@PeterMortensen Incluso más extraño, ni siquiera se ha preguntado en ninguno de los sitios hermanos, al menos, eso no lo puedo encontrar.
Nzall
99
Puede que no sea necesario preguntar, ya que Wikipedia tiene una respuesta bastante buena: en.wikipedia.org/wiki/Hexadecimal
Piers Myers
44
¿Por qué tantos votos a favor?
Vi.

Respuestas:

31

El hexadecimal es un sistema numérico que es muy común en la informática. Es posible que haya oído hablar de binario antes, que solo tiene 1s y 0s.

Los humanos usan principalmente el sistema decimal (base 10), en el que tenemos 10 números:

0, 1, 2, 3, 4, 5, 6, 7, 8 y 9

Sin embargo, las computadoras no funcionan con el sistema decimal. Tienen un estado binario (algo es verdadero o falso) y, por lo tanto, opera en la base 2 (los números binarios generalmente tienen el prefijo 0b) con los únicos números como 0 y 1.

En días anteriores, se usaba octal (o base 8). Fue bueno porque "10" en la base 8 era "0b1000" en binario (10 en decimal es 1010 en binario). Octal suele tener el prefijo "0o" al escribir números (pero solo tiene el prefijo '0' en la mayoría de los lenguajes de programación). Se llama base 8 porque tenemos ocho números.

Octal todavía se usa hoy en día, principalmente cuando se configuran permisos en Unix y Linux

A medida que pasaba el tiempo, necesitábamos una forma más fácil de representar números más grandes, ya que la potencia informática y el espacio aumentaban rápidamente. Se convirtió en el estándar usar hexadecimal , o base 16, porque 16, como 8 es una potencia de 2, lo que facilita la conversión de dígito a dígito (vea este comentario. Debido a que hay 16 números, se usaron letras para los otros números. Además, el hexadecimal suele tener el prefijo 0x.

Los números hexadecimales también son útiles ya que un número hexadecimal es de 4 bits (1 número octal puede representar 2) y, por lo tanto, dos números en un byte. En la mayoría de los editores hexadecimales , así es como se representa un byte.

Contando

En la base 10, tenemos 10 números. Después de las 9, ¿qué hacemos? Nos hemos quedado sin números. Creamos un lugar de "decenas" a la izquierda del número original, que sea 1 y que el más a la derecha se convierta en 0. Lo mismo ocurre también en hexadecimal:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, 10, 11, etc.

Hasta llegar a 0x1F, y luego el proceso se repite hasta 0xFF (255 en decimal) y luego obtenemos 0x100. Puede encontrar más información sobre el conteo aquí .

Aquí hay un gráfico que muestra las conversiones entre decimal, hexadecimal, octal y binario: Tabla de conversión hexadecimal

Justin Krejcha
fuente
21
El principal beneficio es que, dado que 16 es una potencia de 2, puede hacer conversiones de dígito a dígito.
TRiG
2
Tenga en cuenta que muchos idiomas usan el 0prefijo y no 0opara los números octales.
ysap
2
Su nota sobre 16 como múltiplo de 2 se copia incorrectamente del comentario de TRiG. Ser un múltiplo no es la relación relevante.
Ryan Reich
2
@ justcool393, vale la pena mencionar que el nombre de lo que llama "base 10" es en realidad "decimal". Esto puede ayudar a aclarar la relación entre la base 8 (octal), la base 10 (decimal) y la base 16 (hexadecimal).
HalosGhost
3
Arrrg. ¡Cada base es base 10! stale.soup.io/post/114652207/every-base-is-base-10
woliveirajr
4

¿Qué es el sistema hexadecimal?

El sistema hexadecimal es el sistema de numeración de base 16 que usa 16 dígitos ( 0123456789ABCDEF), en oposición al binario que usa 2 ( 01), o decimal que usa 10 (0-9). Como solo hay 10 dígitos numéricos (en nuestro sistema), las letras de la A a la F se usan para describir "dígito # 10", "dígito # 11", etc.

¿Por qué se usa tanto en informática?

16 es una potencia de 2, lo que facilita la conversión de números hexadecimales a números binarios y, como notó, "las computadoras usan 0s y 1s para almacenar datos". Como cada dígito almacena exactamente 4 bits de datos, un dígito hexadecimal se puede convertir en 4 dígitos binarios (1 bit) muy fácilmente, y viceversa.

| hex bin  | hex bin  |
| 0   0000 | 8   1000 |
| 1   0001 | 9   1001 |
| 2   0010 | A   1010 |
| 3   0011 | B   1011 |
| 4   0100 | C   1100 |
| 5   0101 | D   1101 |
| 6   0110 | E   1110 |
| 7   0111 | F   1111 |

¿Cómo es que usamos hexadecimal?

Hace que sea más fácil que el binario representar grandes números. Solo dos dígitos hexadecimales pueden representar 256 valores diferentes, como en:

dec  0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ...
hex 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 ...

Cuatro dígitos hexadecimales pueden representar 65536 valores, y así sucesivamente. El hexadecimal hace que sea mucho más fácil inspeccionar los datos con algo llamado hexdump , ya que las letras, los números y la puntuación se almacenan en un formato que asigna cada carácter a un número entre 0 y 256 (llamado ASCII , o algunas veces usando otras codificaciones). Además, muchos otros formatos de archivo (como PNG) se adaptan para que cada información que contiene el archivo contenga 256 bits.

En resumen, 16 es una potencia de 2 y 256 es una potencia de 16. Esto lo convierte en una buena manera de representar tanto números binarios como texto u otros datos.

Perilla de la puerta
fuente
2

¿Qué es el sistema hexadecimal?

Si tiene un número abcd, entonces esto es equivalente a ((a * + b) + c) + d. Entonces esto es como:

  • abcd (binario) = ((a * 2 + b) * 2 + c) * 2 + d
  • abcd (octal) = ((a * 8 + b) * 8 + c) * 8 + d
  • abcd (decimal) = ((a * 10 + b) * 10 + c) * 10 + d
  • abcd (hexadecimal) = ((a * 16 + b) * 16 + c) * 16 + d

En un sistema hexadecimal necesita 16 dígitos, pero solo tenemos diez dígitos disponibles (0..9). Entonces, para los 6 dígitos que faltan, los caracteres A..F se usan con A = 10, ..., F = 15.

Por supuesto, también podría pensar en muchos otros sistemas numéricos, por ejemplo, con una base de 5 o 7.

Para el cálculo con números, no importa qué base esté utilizando. Puede sumar y multiplicar en el sistema binario, puede hacerlo en el sistema decimal y puede hacerlo en el sistema hexadecimal. Estamos acostumbrados a calcular en el sistema decimal, las computadoras lo hacen en el sistema binario.

¿Por qué se usa tanto el sistema hexadecimal en informática?

Como se dijo anteriormente, no importa en qué sistema de números le dé un número. El número subyacente es el mismo, solo cambia la representación. La computadora siempre almacenará y usará internamente (por ejemplo, calcular con) números en binario.

Entonces, ¿por qué los programadores (como yo) usan diferentes sistemas numéricos? Hay dos razones para elegir un sistema numérico basado en una potencia de 2. La primera es la brevedad y la segunda es una buena vista de qué bits están configurados.

Falta

Si tengo una función que está escribiendo el contenido de un búfer en la consola, podría escribir un código que se imprima en decimal, que es de 1 a 3 dígitos (decimal: 0..255). Si estoy escribiendo el número en formato binario, terminaría con una salida de 1 a 8 dígitos (binario: 0..11111111). También podría usar el sistema octal y terminar con 1 a 3 dígitos (octal: 0..377) o hexadecimal con 1 a 2 dígitos (hexadecimal: 0..ff).

Esto fue solo por un byte. Supongamos ahora que desea escribir un número de 32 bits:

  • binario: 0..11111111111111111111111111111111
  • octal: 0..37777777777
  • decimal: 4294967295
  • hexadecimal: 0..ffffffff

Como puede ver, la salida hexadecimal es la más corta.

Viendo los pedacitos

Un patrón común para almacenar información empaquetada es usar cada bit en un byte individualmente. Tomemos por ejemplo los atributos del archivo (ver MDSN ). Desea los atributos "oculto", "archivo", "solo lectura", "temporal" y otros. Puede almacenar cada atributo en un byte o puede empaquetar la información en un byte (o múltiples bytes) donde cada bit representa exactamente un atributo. Si observa los dwFlagsAndAttributes en el artículo de MSDN, puede ver que Windows está usando este patrón.

Al permanecer en la página de MSDN tomemos FILE_ATTRIBUTE_ENCRYPTEDcomo ejemplo, este indicador es decimal 16384 y hexadecimal 0x4000. El "0x" principal es solo una convención de programador C para marcar números hexadecimales, por lo que solo veremos 4000. Cuando desee saber qué bits están configurados, primero deberá convertir 16384 a binario; nada que pueda normalmente lo hago con aritmética mental. Pero tomemos hexadecimal 4000. Esto es bastante fácil. 16 es 2 * 4, por lo que cada número hexadecimal es exactamente 4 bits. Por lo tanto, simplemente convertimos 4 a 0100 binario y los ceros a 0000 binario y hemos terminado.

A menudo no se trata de bits individuales, sino que los programadores tienden a alinear las cosas con potencias de 2. Nos gusta cargar los programas no a una dirección aleatoria sino a una dirección con los 16 bits menos significativos establecidos en cero. De esa manera, si tiene una dirección 0x12345678, puede ver fácilmente que esta dirección pertenece al programa cargado a 0x1234 y no a la cargada a 0x03810000.

¿Prefiere binario, octal o hexadecimal?

Esa es una cuestión de sabor. Si desea ver directamente los bits binarios, podría estar bien. Para números largos, el binario puede ser frustrante si tiene que contar los dígitos para ver si el bit 23 o el bit 24 están configurados. Esto es más fácil con hexadecimal porque cada dígito representa 4 bits, por lo que tiene menos recuento involucrado. Personalmente, rara vez uso octal. Es muy poco frecuente.

Pero, ¿por qué no usar la base 32?

Base 32 es una potencia de 2, esto es genial. Pero necesitaría 32 dígitos como 0..9, A..V. Esto es mucho más dígitos para recordar (¿puede identificar fácilmente a qué número 'S' respondería?). Otra advertencia es que con la base 32 pierdes la característica agradable de que dos dígitos hexadecimales son exactamente un byte, ¡lo cual es realmente útil si miras el contenido de la memoria! Además, con la base 32 todavía necesita 2 dígitos para representar los valores que puede tener un byte. Para un valor de 32 bits solo necesita 7 dígitos en lugar de 8 dígitos hexadecimales, pero eso no es mucho para vivir con las desventajas del sistema base 32.

Werner Henze
fuente
1

Los diferentes sistemas de representación de números que se usan actualmente son (= incluir):
binario, octal, decimal y hexadecimal.
Cuál elegir a menudo depende de la facilidad de uso para la tarea en cuestión.

el binario se usa dentro de los sistemas informáticos y la tecnología digital en general, ya que es fácil de representar dentro de la electrónica; Las funciones para los números de base 2 son fáciles de construir, como lo es la representación de encendido / apagado, verdadero / falso o cualquier otra información similar de dos estados que se repita.

es bueno tener octal si hay grupos de tres dígitos binarios, por ejemplo, como es el caso en la configuración de permisos en Unix / Linux.

omitiendo el decimal por un momento, el hexadecimal es bueno de la misma manera que el octal pero para cuatro dígitos binarios, y el hecho de que 8 bits, un byte, encaja perfectamente en dos dígitos hexadecimales. ( = la respuesta )
De esto se deduce que los grupos pares de 8 bits en una computadora se escriben, representan y entienden fácilmente, es decir; muy conveniente en el uso diario al escribir software, manejar datos (por ejemplo, valores de color rgb en HTML / CSS), formar estructuras de datos y cualquier otra cosa similar.

decimal . Uno podría adivinar que el sistema decimal se desarrolló a partir del hecho de que tenemos diez dedos de manos y pies. Un solo dígito representa el número de elementos contados, uno para cada dedo hasta el máximo de diez.

Estos representan sistemas numéricos con una base de:
2, 8, 10 y 16.

En general, la base indica cuántos "elementos" de un solo dígito puede contar, por ejemplo, el binario tiene dos, el decimal tiene diez.
Como el hexadecimal tiene 16 elementos de un solo dígito, el sistema requiere 16 "números", por lo tanto, utiliza 0-9 y af (6 extra, en comparación con el decimal), donde "a" es igual a 10 y "f" es igual a 15 en el sistema decimal.

Para continuar con el modo general: cualquier base 2 o superior funciona tan bien como cualquier otra cosa, siempre que tenga una buena representación de un solo dígito.

Los números en decimal están formados por:

... d * 10³ + c * 10² + b * 10¹ + a * 10⁰

para un número decimal "dcba" - con d, c, b, a, seleccionado de 0123456789

Ahora cambie eso a:

... d * base³ + c * base² + b * base¹ + a * base⁰

y tiene una forma más general que muestra cómo "funciona" cualquier base 2 o superior;
por ejemplo, una base 5 de cinco dígitos podría ser tan conveniente como cualquiera de los anteriores, o por qué no un sistema de 12 dígitos (una docena) por tiempo (12 horas = "10" base 12, con el primer "decimal" que indica 1/12 [5 minutos] de una hora es)

Nota: ⁰¹²³ - superíndice 0123 si su pantalla muestra algo más

Hannu
fuente
Actualmente esto podría ser un 'trozo' de lo que realmente puede convertirse.
Hannu