Te doy la bienvenida a proyecto online, ahora vas a encontrar la solucíon de lo que buscabas.
Solución:
El hexadecimal es un sistema numérico muy común en informática. Es posible que haya oído hablar de binario antes, que solo tiene unos y ceros.
Los humanos usamos 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 un sistema decimal. Tienen un estado binario (algo es true o false) y, por lo tanto, opera en base 2 (los números binarios generalmente tienen el prefijo 0b) y los únicos números son 0 y 1.
En días anteriores, se utilizó octal (o base 8). Fue bueno porque “10” en base 8 era “0b1000” en binario (10 en decimal es 1010 en binario). Octal suele tener el prefijo “0o” cuando se escriben números (pero 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 establecen permisos en Unix y Linux
A medida que pasaba el tiempo, necesitábamos una forma más sencilla 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 (ver este comentario. Debido a que hay 16 números, se usaron letras para los otros números. Además, hexadecimal suele tener el prefijo 0x.
Los números hexadecimales también son útiles dado que un número hexadecimal tiene 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 base 10, tenemos 10 números. Después de las 9, ¿qué hacemos? Se nos acabaron los números. Creamos un lugar de “decenas” a la izquierda del número original, que sea 1 y el más a la derecha se convierta en 0. Lo mismo sucede en hexadecimal también:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, 10, 11, etc.
Hasta que llegamos 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:
Que es el sistema hexadecimal
El sistema hexadecimal es el sistema de numeración de base 16 que utiliza 16 dígitos (0123456789ABCDEF
), a diferencia del binario que usa 2 (01
) o decimal que usa 10 (0-9). Dado que solo hay 10 dígitos numéricos (en nuestro sistema), las letras de la A a la F se utilizan para describir el “dígito # 10”, el “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 en números binarios y, como notó, “las computadoras usan 0 y 1 para almacenar datos”. Dado que 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 |
como es que usamos hexadecimal
Hace que sea más fácil que el binario representar números grandes. 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, etc. Hex hace que sea mucho más fácil inspeccionar 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, a veces, con otras codificaciones). Además, muchos otros formatos de archivo (como PNG) se adaptan para que cada pieza de información de la que se compone 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 forma de representar tanto números binarios como texto u otros datos.
¿Qué es el sistema hexadecimal?
Si tiene un número abcd, entonces en 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 base de 5 o 7.
Para el cálculo con números, no importa qué base esté utilizando. Puedes sumar y multiplicar en el sistema binario, puedes hacerlo en el sistema decimal y puedes 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 numérico asigne 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 se establecen.
Falta
Si tengo una función que está escribiendo el contenido de un búfer en la consola, entonces 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 para 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 bits
Un patrón común para almacenar información empaquetada es usar cada bit en un byte individualmente. Tomemos por ejemplo el archivo attributes (ver MDSN). Quiere que el attributes “oculto”, “archivo”, “solo lectura”, “temporal” y otros. Podrías almacenar cada uno attribute en un byte o puede empaquetar la información en un byte (o varios bytes) donde cada bit representa exactamente uno attribute. Si observa dwFlagsAndAttributes en el artículo de MSDN, puede ver que Windows está usando este patrón.
Quedándonos en la página de MSDN, tomemos FILE_ATTRIBUTE_ENCRYPTED
como ejemplo, esta bandera es 16384 decimal y 0x4000 hexadecimal. El “0x” inicial es solo una convención del programador de 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 la aritmética mental. Pero tomemos el hexadecimal 4000. Esto es bastante fácil. 16 es 2 * 4, por lo que cada número hexadecimal tiene exactamente 4 bits. Por lo tanto, simplemente convertimos 4 a 0100 binario y los ceros a 0000 binario y listo.
A menudo no se trata de bits individuales, pero los programadores tienden a alinear las cosas con potencias de 2. Nos gusta cargar programas no en una dirección aleatoria sino en una dirección con los 16 bits menos significativos puestos a cero. De esa manera, si tiene una dirección 0x12345678, puede ver fácilmente que esta dirección pertenece al programa cargado en 0x1234 y no al cargado en 0x03810000.
¿Prefieres binario, octal o hexadecimal?
Esa es una cuestión de sabor. Si desea ver directamente los bits, el binario podría estar bien. Para números largos, el binario puede resultar frustrante si tiene que contar los dígitos para ver si el bit 23 o el bit 24 está establecido. Esto es más fácil con hexadecimal porque cada dígito representa 4 bits, por lo que tiene menos conteo involucrado. Personalmente, rara vez uso octal. Es muy poco común.
Pero, ¿por qué no usar la base 32?
La base 32 es una potencia de 2, esto es genial. Pero necesitaría 32 dígitos como 0..9, A..V. Estos son muchos 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 se pierde la característica interesante de que dos dígitos hexadecimales son exactamente un byte, lo que resulta muy útil si echa un vistazo al 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 tanto para vivir con las desventajas del sistema base 32.
Si haces scroll puedes encontrar las observaciones de otros desarrolladores, tú igualmente puedes insertar el tuyo si lo deseas.