Saltar al contenido principal
LibreTexts Español

7.3: Hexadecimal (base 16)

  • Page ID
    117550
  • \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \) \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)\(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\) \(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\)\(\newcommand{\AA}{\unicode[.8,0]{x212B}}\)

    Ahora, objetivamente hablando, resulta que diez es una base bastante extraña también. Sé que no lo parece, pero eso es sólo porque estamos muy acostumbrados a ello. Realmente, si estás agregando repetidamente pequeños círculos a un dibujo, diez es un lugar divertido para decidir dibujar la línea e ir a más dígitos. Solo es divisible por 2 y 5 (de todas las cosas), no es un cuadrado perfecto, y todo esto lo convierte en una elección un poco incómoda.

    En informática, resulta ser muy (muy) conveniente usar una base que es una potencia de dos. Esto significa una base que es “de dos a algo”. En días anteriores de computación, el octal (base 8) era una opción común. Pero por diversas razones, eso resulta ser menos conveniente que usar base 16, o hexadecimal. 1 Cada vez que estés trabajando con hardware, sistemas operativos, controladores de dispositivos, máscaras de bits o cualquier otra cosa de bajo nivel, encontrarás números escritos en base 16 muchísimo. Entonces estudiemos esta base en particular con cierto detalle.

    La Base 16 necesitará dieciséis dígitos, por supuesto. Desafortunadamente, nosotros, las personas con diez dedos, solo hemos inventado diez símbolos que obviamente son numéricos: los dígitos del 0 al 9. Entonces, ¿qué hacemos por los otros seis? Resulta que los originadores de este sistema tomaron quizás el enfoque más obvio: reutilizar las letras del alfabeto. Entonces agregamos los “dígitos” de la A a la F (a veces escritos en mayúsculas, a veces en minúsculas) a nuestro conjunto de símbolos. Estas, entonces, son las cantidades que representa cada dígito individual:

    0 cero
    1 uno
    2 dos
    3 tres
    4 cuatro
    5 cinco
    6 seis
    7 siete
    8 ocho
    9 nueve
    A diez
    B once
    C doce
    D trece
    E catorce
    F quince

    Los inventores de la notación hexadecimal no tuvieron que usar el alfabeto, claro; podrían haber elegido una estrella para diez, un cuadrado para once, una cara feliz para doce, etc., pero eso no hubiera sido muy fácil de escribir. Así que estamos atrapados con las letras, para bien o para mal. Practica mirar fijamente esa letra A y decir la palabra “diez”. Porque eso es lo que significa. En hexadecimal, la secuencia de dígitos 10 no significa “diez”. Significa “dieciséis”.

    Esos son los símbolos. ¿Cuáles son los valores posicionales? Bueno, son (desde la derecha) el lugar\(16^0\)'s, el lugar\(16^1\)'s, el lugar\(16^2\)'s, y así sucesivamente. Escrito decimalmente, esos funcionan para ser el lugar del 1, el lugar de los 16, el lugar del 256, el lugar del 4096, y así sucesivamente. De nuevo, esos números parecen extraños sólo porque cuando se escriben decimalmente no salen muy “redondos”.

    El valor de un número como 72E3 se calcula como:\[\text{72E3}_{16} = 7 \times \text{4096}_{10} + 2 \times 256_{10} + 14 \times 16_{10} + 3 \times 1_{10} = \text{29,411}_{10}.\] Observe que tratamos la “E” igual que otro dígito, que es. También llamamos al 72E3 “un número”, que es. Acostúmbrate a la idea de que los números —números totalmente legítimos— pueden tener letras para algunos de sus dígitos.

    En hexadecimal, ¿cuál es el valor más alto que puede caber en un dígito? Respuesta: F (que es quince.) ¿Cuál es el más alto que puede caber en dos dígitos? FF (que es doscientos cincuenta y cinco.) ¿Y qué pasa con tres dígitos? FFF (que es sesenta y cinco mil quinientos treinta y cinco.) Y así sucesivamente. Si cuentas en hexadecimal, haces lo mismo que en decimal, solo “vuelcas sobre el odómetro” cuando llegas a F, no cuando llegas a 9.

    Convertir a y desde decimal

    Entonces sabemos tomar un número hexadecimal (like\(\text{72E3}_{16}\)) y encontrar su equivalente decimal: simplemente interpretamos el valor de cada lugar como 1, 16, 256, 4096, y así sucesivamente. ¿Y qué hay de ir por el otro lado? Si tuviéramos un número decimal, ¿cómo escribiríamos su valor hexadecimalmente?

    Primero, aprendamos dos operaciones (si aún no las conoces) que vienen muy bien a la hora de trabajar con enteros. El primero se llama operador módulo (escrito “mod “), y simplemente da el resto al dividir dos números. Este es un concepto que probablemente aprendiste en la primaria pero quizás no lo hayas usado desde entonces. A medida que envejecemos (y usamos calculadoras), tendemos a pensar en una operación de división\(13 \div 3\) como ser\(4.333\dots\). Pero ahí es cuando queremos una respuesta de valor real (en lugar de valor entero). Si solo queremos enteros, entonces decimos que\(13 \div 3\) es “4 con un resto de 1”. (El “4" se llama cociente.) Esto significa que si tienes 13 objetos, puedes sacar cuatro grupos de 3 de ellos, y luego tener 1 objeto sobrante. La forma en que escribimos matemáticamente esta operación es “13 mod 3”. En este caso, resulta que 13 mod 3 = 1.

    Pensemos a través de lo que rinde el operador mod para diferentes valores. Sabemos que 13 mod 3 = 1. ¿Qué pasa con el 14 mod 3? Eso es igual a 2, ya que podemos (de nuevo) sacar cuatro grupos de 3's, pero entonces nos sobrarían dos. ¿Qué pasa con el 15 mod 3? Eso rinde 0, ya que 3 entra a 15 de manera uniforme, sin dejar ningún resto en absoluto. 16 mod 3 nuevamente nos da 1, al igual que 13 lo hizo. Si lo piensas bien, te darás cuenta de que 19 mod 3 también será 1, al igual que 22 mod 3 y 25 mod 3. Se dice que estos números que dan el mismo resto son “congruentes mod 3”. Los números 2, 5, 8, 11, 14, etc. también son todos congruentes (entre sí) mod 3, ya que todos dan un resto de 2.

    Otra observación es que el valor de\(n\) mod\(k\) siempre da un valor entre 0 y\(k-1\). Puede que no sepamos de un vistazo qué es 407,332,117 mod 3, pero sabemos que no puede ser 12, o 4, o incluso 3, porque si nos quedaran tantos elementos después de sacar grupos de 3's, aún podríamos sacar otro grupo de 3. El resto sólo nos da lo que queda después de sacar grupos, así que por definición no puede quedar un grupo entero (o más) en el resto.

    La otra operación que necesitamos es simplemente una operación de “redondear hacia abajo”, tradicionalmente llamada “piso" y escrita con corchetes: “\(\lfloor \ \rfloor\)”. El piso de un entero es en sí mismo. El piso de un no entero es el entero justo debajo de él. Entonces\(\lfloor 7 \rfloor = 7\) y\(\lfloor 4.81 \rfloor = 4\). Es así de simple.

    La razón por la que usamos el operador de piso es solo para obtener el número completo de veces que un número entra en otro. \(\lfloor 13 \div 3 \rfloor = 4\), por ejemplo. Al usar mod y floor, obtenemos el cociente y el resto de una división, ambos enteros. Si nuestros números son 25 y 7, tenemos\(\lfloor 25 \div 7 \rfloor = 3\) y 25 mod 7 = 4. Observe que esto equivale a decir eso\(25 = 3 \times 7 + 4\). Estamos preguntando “¿cuántos grupos de 7 hay en 25?” y la respuesta es que 25 es igual a 3 grupos de 7, más 4 extra.

    El procedimiento general para convertir de una base a otra es usar repetidamente mod y floor para despojar los dígitos de derecha a izquierda. Así es como lo haces:

    Expresar un valor numérico en una base

    1. Toma el número mod la base. Anota ese dígito.

    2. Divide el número por la base y toma la palabra:

      1. Si consigues cero, ya terminaste.

      2. Si obtienes distinto de cero, entonces haz de este número distinto de cero tu nuevo valor, mueve tu lápiz a la izquierda del dígito (s) que ya has anotado y regresa al paso 1.

    Como ejemplo, vayamos hacia atrás al número hexadecimal 72E3 como en nuestro ejemplo anterior, que ya calculamos era igual a 29,411 en decimal. A partir de 29,411, entonces, seguimos nuestro algoritmo:

    1. (Paso 1) Primero computamos 29,411 mod 16. Esto resulta ser 3. Muchas calculadoras científicas pueden realizar esta operación, al igual que los lenguajes de programación como Java y lenguajes de análisis de datos como R. O, podrías hacer división larga (459,494\(\div\) 16) a mano y ver cuál es el resto. O bien, podrías dividir en una calculadora ordinaria y ver si la parte después del punto decimal es 0, o\(\frac{1}{16}^\text{th}\), o\(\frac{2}{16}^\text{ths}\), etc. o, podrías sentarte ahí y restar 16 después de 16 después de 16 de 29 mil 411 hasta que no haya más 16's para sacar, y ver cuál es la respuesta es. En todo caso, la respuesta es 3. Entonces escribimos 3:

      3

    2. (Paso 2) Ahora dividimos 29,411 por 16 y tomamos la palabra. Esto produce\(\lfloor \text{29,411} \div 16 \rfloor = 1838\). Como esto no es cero, realizamos el paso 1: hacer de 1838 nuestro nuevo valor, mover nuestro lápiz a la izquierda del 3, y volver al paso 1.

    3. (Paso 1) Ahora computa 1838 mod 16. Esto nos da el valor 14, que por supuesto es un número base 10. El dígito hexadecimal equivalente es E. Así que ahora escribimos E a la izquierda del 3:

      E3

    4. (Paso 2) Dividir 1838 por 16 y tomar la palabra nos da 114. Como esto nuevamente no es cero, realizamos el paso 2.2: hacer 114 nuestro nuevo valor, mover nuestro lápiz a la izquierda de la E, y volver al paso 1.

    5. (Paso 1) A continuación calculamos 114 mod 16. Esto resulta ser 2, así que escribimos un 2:

      2E3

    6. (Paso 2)\(\lfloor 114 \div 16 \rfloor\) La computación produce 7, que de nuevo no es cero, por lo que 7 se convierte en nuestro nuevo valor y volvemos una vez más al paso 2.2.

    7. (Paso 1) 7 mod 16 es simplemente 7, así que lo escribimos:

      72E3

    8. (Paso 2) Finalmente,\(\lfloor 7 \div 16 \rfloor\) es cero, así que vamos al paso 2.1 y ya terminamos. La página tiene 72E3 escrito en negrita grande, que es la respuesta correcta.

    Sumando números hexagonales

    Supongamos que tenemos dos números hexadecimales, y queremos sumarlos juntos para obtener un resultado hexadecimal. ¿Cómo lo hacemos? Una forma es primero convertirlos a decimales, luego agregarlos como aprendiste en primer grado, luego convertir la respuesta de nuevo a hexadecimal. Pero podemos quedarnos “nativamente hexadecimales” siempre y cuando agreguemos correctamente cada par de dígitos.

    Vamos a probarlo. Supongamos que queremos calcular esta suma:\[\begin{array}{*{5}{c@{\hspace{0pt}}}} & 4 & 8 & \text{D} & 4_{16} \\ + & 5 & 9 & 2 & 5_{16} \\ \hline & & & & ?_{16} \\ \end{array}\] Procedemos de la manera de primer grado de derecha a izquierda. Sumando los valores posicionales de uno, obtenemos 4 + 5 = 9:\[\begin{array}{*{5}{c@{\hspace{0pt}}}} & 4 & 8 & \text{D} & 4_{16} \\ + & 5 & 9 & 2 & 5_{16} \\ \hline & & & & 9_{16} \\ \end{array}\] Bastante fácil. Ahora sumamos el siguiente dígito a la izquierda (el lugar dieciséis, fíjate, no el lugar de los diez) y encontramos D + 2. Ahora, ¿qué en el mundo es “D+2"? En realidad es fácil: todo lo que tienes que hacer es lo mismo que hiciste cuando eras niño y tenías que agregar algo como 4 + 5. Aún no habías memorizado la respuesta, y así empezaste con cuatro dedos levantados, y contaste con “1... 2... 3... 4... 5”, levantando otro dedo cada vez. Entonces, miraste tus manos, ¡y he aquí! nueve dedos.

    Haremos lo mismo aquí: comenzar con el número “D”, y contar dos lugares adicionales: “E... F.” La respuesta es F. Ese es el número que es dos mayor que D. Suerte para nosotros, todavía cabe en un dígito. Entonces ahora tenemos: Hasta el momento\[\begin{array}{*{5}{c@{\hspace{0pt}}}} & 4 & 8 & \text{D} & 4_{16} \\ + & 5 & 9 & 2 & 5_{16} \\ \hline & & & F & 9_{16} \\ \end{array}\] tan bueno. El siguiente par de dígitos es de 8 + 9. Aquí es donde quieres tener cuidado. Es probable que mires “8+9" e inmediatamente decir “¡17!” Pero 8 + 9 no es 17 en hexadecimal. Para averiguar de qué se trata, comenzamos con el número 8, y contamos: “9... A... B... C... D... E... F... 10... 11...”. La respuesta es “11”, que por supuesto es como se escribe “diecisiete” en hexadecimal. Entonces al igual que en la primaria, escribimos 1 y llevamos el 1:\[\begin{array}{*{5}{c@{\hspace{0pt}}}} & 1 & & & \\ & 4 & 8 & \text{D} & 4_{16} \\ + & 5 & 9 & 2 & 5_{16} \\ \hline & & 1 & F & 9_{16} \\ \end{array}\] Finalmente, nuestro último dígito es 4 + 5, más el llevado 1. Empezamos con cuatro y contamos cinco: “5... 6... 7... 8... 9.” Después agregamos el acarreo, y contamos “... A.” La respuesta es A, sin acarreo, y así tenemos nuestra respuesta final:\[\begin{array}{*{5}{c@{\hspace{0pt}}}} & 1& & & \\ & 4 & 8 & \text{D} & 4_{16} \\ + & 5 & 9 & 2 & 5_{16} \\ \hline & \textbf{A} & \textbf{1} & \textbf{F} & \textbf{9}_{\textbf{16}} \\ \end{array}\]


    1. A veces los números escritos en la base 16 se llaman “números hexadecimales”.

    This page titled 7.3: Hexadecimal (base 16) is shared under a not declared license and was authored, remixed, and/or curated by Stephen Davies (allthemath.org) via source content that was edited to the style and standards of the LibreTexts platform; a detailed edit history is available upon request.