Sistema hexadecimal
# Sistema hexadecimal

El sistema hexadecimal (abreviado hex.) es el sistema de numeración posicional que tiene como base el 16. Su uso actual está muy vinculado a la informática y ciencias de la computación donde las operaciones de la CPU suelen usar el byte u octeto como unidad básica de memoria, debido a que un byte representa $2^{8}$ valores posibles, y esto puede representarse como $2^{8}=2^{4}\cdot 2^{4}=16\cdot 16=$ $1\cdot 16^{2}+0\cdot 16^{1}+0\cdot 16^{0}$, que equivale al número en base 16 $100_{16}$; dos dígitos hexadecimales corresponden exactamente a un byte.

En principio, dado que el sistema usual de numeración es de base decimal y, por ello, solo se dispone de diez dígitos, se adoptó la convención de usar las seis primeras letras del alfabeto latino para suplir los dígitos que faltan. El conjunto de símbolos es el siguiente:

   $S=\{0,1,2,3,4,5,6,7,8,9,\mathrm {A} ,\mathrm {B} ,\mathrm {C} ,\mathrm {D} ,\mathrm {E} ,\mathrm {F} \}\,$

Se debe notar que las letras corresponden a los siguientes valores numéricos decimales:

    A = 10, B = 11, C = 12, D = 13, E = 14 y F = 15.

En ocasiones se emplean letras minúsculas en lugar de mayúsculas. Como en cualquier sistema de numeración posicional, el valor numérico de cada dígito es alterado dependiendo de su posición en la cadena de dígitos, quedando multiplicado por una cierta potencia de la base del sistema, que en este caso es 16. Por ejemplo: $3E0A_{16}$ = $3×16^3$ + $E×16^2$ + $0×16^1$ + $A×16^0$ = 3×4096 + 14×256 + 0×16 + 10×1 = 15882.

El sistema hexadecimal actual fue introducido en el ámbito de la computación por primera vez por IBM en 1963. Una representación anterior, con 0-9 y u-z, fue usada en 1956 por la computadora Bendix G-15.

## Tabla de conversión entre hexadecimal, decimal, octal y binario

| $0_{hex}$ | = | $0_{dec}$ | = | $0_{oct}$ | 0 | 0 | 0 | 0 |
| - | - | - | - | - | - | - | - | - |
| $1_{hex}$ | = | $1_{dec}$ | = | $1_{oct}$ | 0 | 0 | 0 | 1 |
| $2_{hex}$ | = | $2_{dec}$ | = | $2_{oct}$ | 0 | 0 | 1 | 0 |
| $3_{hex}$ | = | $3_{dec}$ | = | $3_{oct}$ | 0 | 0 | 1 | 1 |
| $4_{hex}$ | = | $4_{dec}$ | = | $4_{oct}$ | 0 | 1 | 0 | 0 |
| $5_{hex}$ | = | $5_{dec}$ | = | $5_{oct}$ | 0 | 1 | 0 | 1 |
| $6_{hex}$ | = | $6_{dec}$ | = | $6_{oct}$ | 0 | 1 | 1 | 0 |
| $7_{hex}$ | = | $7_{dec}$ | = | $7_{oct}$ | 0 | 1 | 1 | 1 |
| $8_{hex}$ | = | $8_{dec}$ | = | $10_{oct}$ | 1 | 0 | 0 | 0 |
| $9_{hex}$ | = | $9_{dec}$ | = | $11_{oct}$ | 1 | 0 | 0 | 1 |
| $A_{hex}$ | = | $10_{dec}$ | = | $12_{oct}$ | 1 | 0 | 1 | 0 |
| $B_{hex}$ | = | $11_{dec}$ | = | $13_{oct}$ | 1 | 0 | 1 | 1 |
| $C_{hex}$ | = | $12_{dec}$ | = | $14_{oct}$ | 1 | 1 | 0 | 0 |
| $D_{hex}$ | = | $13_{dec}$ | = | $15_{oct}$ | 1 | 1 | 0 | 1 |
| $E_{hex}$ | = | $14_{dec}$ | = | $16_{oct}$ | 1 | 1 | 1 | 0 |
| $F_{hex}$ | = | $15_{dec}$ | = | $17_{oct}$ | 1 | 1 | 1 | 1 |

## Fracciones

Como el único factor primo de 16 es 2, todas las fracciones que no tengan una potencia de 2 en el denominador tendrán un desarrollo hexadecimal periódico.

| Fracción | Hexadecimal | Resultado en hexadecimal |
| - | - | - |
| 1/2 | 1/2 | 0,8 |
| 1/3 | 1/3 | 0,5 periódico |
| 1/4 | 1/4 | 0,4 |
| 1/5 | 1/5 | 0,3 periódico |
| 1/6 | 1/6 | 0,2A periódico |
| 1/7 | 1/7 | 0,249 periódico |
| 1/8 | 1/8 | 0,2 |
| 1/9 | 1/9 | 0,1C7 periódico |
| 1/10 | 1/A | 0,19 periódico |
| 1/11 | 1/B | 0,1745D periódico |
| 1/12 | 1/C | 0,15 periódico |
| 1/13 | 1/D | 0,13B periódico |
| 1/14 | 1/E | 0,1249 periódico |
| 1/15 | 1/F | 0,1 periódico |
| 1/16 | 1/10 | 0,1 |

Existe un sistema para convertir números fraccionarios a hexadecimal de una forma más mecánica. Se trata de convertir la parte entera con el procedimiento habitual y convertir la parte decimal aplicando sucesivas multiplicaciones por 16 hasta convertir el resultado en un número entero.

Por ejemplo: 0,06640625 en base decimal.

Multiplicado por 16: 1,0625, el primer decimal será 1. Volvemos a multiplicar por 16 la parte decimal del anterior resultado: 1. Por lo tanto el siguiente decimal será un 1.Resultado: 0,11 en base hexadecimal. Como el último resultado se trata de un entero, hemos acabado la conversión.

Hay ocasiones en las que no llegamos nunca a obtener un número entero, en ese caso tendremos un desarrollo hexadecimal periódico.

## Operaciones en sistema hexadecimal

En el sistema hexadecimal, al igual que en el sistema decimal, binario y octal, se pueden hacer diversas operaciones matemáticas. Entre ellas se encuentra la resta entre dos números en sistema hexadecimal, la que se puede hacer con el método de complemento a 15 o también utilizando el complemento a 16. Además de éstas, debemos manejar adecuadamente la suma en sistema hexadecimal, explicada a continuación:

| Hexadecimal | Decimal |
| - | - |
| A | 10 |
| B | 11 |
| C | 12 |
| D | 13 |
| E | 14 |
| F | 15 |

### Suma

* 9 + 7 = 16 (16 - 16 = 0 nos llevamos 1 y es = 10)

En este caso la respuesta obtenida, 16, no está entre el 0 y el 15, por lo que tenemos que restarle 16. Por lo tanto, la respuesta obtenida será 10 (sistema hexadecimal).

Hay que tener cuidado de utilizar correctamente las letras, ya que operar a la vez con letras y números puede crear confusiones.

* A + 6 = 16 (16 - 16 = 0 y nos llevamos 1)

Ocurre lo mismo que en el ejemplo anterior.

* A + A = 20 ( 20 – 16 = 4 y nos llevamos 1)

La respuesta es 20 y no está entre el 0 y el 15, por lo que tenemos que restarle 16. Por lo tanto, la respuesta obtenida será 14 (sistema hexadecimal).

Hay que tener cuidado de utilizar correctamente las letras, ya que operar a la vez con letras y números puede crear confusiones.

* F + E = 29 ( 29 – 16 = D y nos llevamos 1)

La respuesta es 29 y no está entre el 0 y el 15, por lo que tenemos que restarle 16. Por lo tanto, la respuesta obtenida será 1D (sistema hexadecimal).

Hay que tener cuidado de utilizar correctamente las letras, ya que operar a la vez con letras y números puede crear confusiones.

* Ahora haremos una operación más complicada:
* A + 2 = 12 (12 corresponde a C)

Ten en cuenta que puedes comprobar los resultados utilizando calculadora científica

### Resta hexadecimal

**Complemento C15**

Como podemos hacer la resta de dos números hexadecimales utilizando el complemento a 15. Para ello tendremos que sumar al minuendo el complemento a quince del sustraendo, y finalmente sumarle el bit de overflow (bit que se desborda).

Para entender la resta en complemento a 15 lo analizaremos con un ejemplo. Esta es la resta que tenemos que resolver:

Primero tenemos que hacer que el minuendo y el sustraendo tengan la misma cantidad de números. Para ello, añadiremos ceros al sustraendo hasta que sean suficientes.

Después, crearemos un nuevo número con la misma cantidad de números que el nuevo sustraendo. Como en el sistema hexadecimal el mayor número que tenemos es el 15, que corresponde a la letra F, tendremos que escribir la F tantas veces como números tiene el sustraendo.

La resta se hace siguiendo las normas generales de la resta común. La diferencia obtenida se denomina el complemento a 15. Recuerda el valor correspondiente a cada letra al operar.

Ahora tendremos que sumar el minuendo y el complemento a 15 utilizando la suma en sistema hexadecimal, mencionada anteriormente.

Con la suma obtenemos el resultado 1A41E0, pero no es la respuesta final. Te habrás dado cuenta de que este nuevo número tiene más cifras que los números iniciales que teníamos que restar. Tenemos que quitar el número de la izquierda (en este caso, el 1) y sumarlo.

La respuesta es A41E1.

Ten en cuenta que puedes comprobar los resultados utilizando una calculadora científica.

**Complemento C16**

También podemos hacer la resta de dos números hexadecimales utilizando el complemento a 16, siguiendo un proceso similar que en el caso del complemento a 15. Para resolver la resta, tendremos que sumar al minuendo el complemento a dieciséis del sustraendo.

Para entender la resta en complemento a 16 lo analizaremos con el ejemplo anterior. Esta es la resta que tenemos que resolver:

Primero tenemos que hacer que el minuendo y el sustraendo tengan la misma cantidad de números, al igual que ocurre en el proceso del complemento a 15.

Para ello, añadiremos ceros al sustraendo hasta que sean suficientes.

Después, crearemos un nuevo número con la misma cantidad de números que el nuevo sustraendo.

Como en el sistema hexadecimal el mayor número que tenemos es el 15, que corresponde a la letra F, tendremos que escribir la F tantas veces como números tiene el sustraendo.

La resta se hace siguiendo las normas generales de la resta común.

Ahora tenemos que sumarle 1 a la diferencia obtenida. Este paso es muy importante, ya que es la diferencia entre hacer la resta en complemento a 15 o 16, y se suele olvidar fácilmente. Además, recuerda que estás sumando en sistema hexadecimal, siguiendo el mismo proceso explicado anteriormente.

A la diferencia obtenida y sumarle uno le denominaremos el complemento a 16.

Ahora tendremos que sumar el minuendo y el complemento a 16

Con la suma obtenemos el resultado 1A41E1.

Te habrás dado cuenta de que este nuevo número tiene más cifras que los números iniciales que teníamos que restas, cosa imposible en una resta (que la diferencia sea mayor que el minuendo y el sustraendo). Por eso, y estando en complemento a 16, tendremos que despreciar (eliminar) el número de la izquierda. En este caso es el 1.

La respuesta, por lo tanto, es A41E1.

En ambos casos la respuesta obtenida deberá ser la misma, ya que hemos resuelto la misma resta en sistema hexadecimal. Por lo tanto, podremos comprobar que hemos operado bien comparando las respuestas obtenidas en complemento a 15 y en complemento a 16 para una misma resta.

Además, ten en cuenta que puedes comprobar los resultados utilizando una calculadora científica.

### Multiplicación hexadecimal

El algoritmo para la multiplicación hexadecimal de dos cantidades de varias cifras es el mismo que en el sistema decimal. Sin embargo, la tabla de multiplicar que se debe usar debe incluir todas las multiplicaciones entre dos números menores que la base:

| | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F | 10 |
| - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| 1 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F | 10 |
| 2 | 2 | 4 | 6 | 8 | A | C | E | 10 | 12 | 14 | 16 | 18 | 1A | 1C | 1E | 20 |
| 3 | 3 | 6 | 9 | C | F | 12 | 15 | 18 | 1B | 1E | 21 | 24 | 27 | 2A | 2D | 30 |
| 4 | 4 | 8 | C | 10 | 14 | 18 | 1C | 20 | 24 | 28 | 2C | 30 | 34 | 38 | 3C | 40 |
| 5 | 5 | A | F | 14 | 19 | 1E | 23 | 28 | 2D | 32 | 37 | 3C | 41 | 46 | 4B | 50 |
| 6 | 6 | C | 12 | 18 | 1E | 24 | 2A | 30 | 36 | 3C | 42 | 48 | 4E | 54 | 5A | 60 |
| 7 | 7 | E | 15 | 1C | 23 | 2A | 31 | 38 | 3F | 46 | 4E | 54 | 5D | 62 | 69 | 70 |
| 8 | 8 | 10 | 18 | 20 | 28 | 30 | 38 | 40 | 48 | 50 | 58 | 60 | 68 | 70 | 78 | 80 |
| 9 | 9 | 12 | 1B | 24 | 2D | 36 | 3F | 48 | 51 | 5A | 63 | 6C | 75 | 7E | 87 | 90 |
| A | A | 14 | 1E | 28 | 32 | 3C | 46 | 50 | 5A | 64 | 6E | 78 | 82 | 8C | 96 | A0 |
| B | B | 16 | 21 | 2C | 37 | 42 | 4E | 58 | 63 | 6E | 79 | 84 | 8F | 9A | A5 | B0 |
| C | C | 18 | 24 | 30 | 3C | 48 | 54 | 60 | 6C | 78 | 84 | 90 | 9C | A8 | B4 | C0 |
| D | D | 1A | 27 | 34 | 41 | 4E | 5D | 68 | 75 | 82 | 8F | 9C | A9 | B6 | C3 | D0 |
| E | E | 1C | 2A | 38 | 46 | 54 | 62 | 70 | 7E | 8C | 9A | A8 | B6 | C4 | D2 | E0 |
| F | F | 1E | 2D | 3C | 4B | 5A | 69 | 78 | 87 | 96 | A5 | B4 | C3 | D2 | E1 | F0 |
| 10 | 10 | 20 | 30 | 40 | 50 | 60 | 70 | 80 | 90 | A0 | B0 | C0 | D0 | E0 | F0 | 100 |
