Conversiones de sistemas numéricos
Cuando escribimos programas para microcontroladores solemos estar atascados tratando con 3 sistemas numéricos diferentes: decimal, binario y hexadecimal (o hex). Usamos el decimal porque es natural; es la forma en que contamos. Por desgracia, no es así como cuentan los ordenadores. Como los ordenadores y los microcontroladores están limitados a 1 y 0, cuentan utilizando secuencias de estos números. Este es el sistema numérico binario. Los números binarios suelen llevar como prefijo los caracteres «0b», que no forman parte del número. A veces también se subdividen en grupos de 4 dígitos para facilitar su lectura y su relación con el sistema numérico hexadecimal. Un ejemplo de número binario es 0b0100.1011. Los puntos en el número no representan nada, sólo facilitan la lectura del número.
El sistema binario es sencillo de entender, pero se necesitan muchos dígitos para utilizar el sistema binario para representar números grandes. El sistema hexadecimal puede representar números mucho más grandes utilizando menos caracteres, y se asemeja mucho a los números binarios. Los números hexadecimales suelen ir precedidos de los caracteres «0x», que no forman parte del número. Un solo dígito hexadecimal puede representar cuatro dígitos binarios.
Los números binarios sólo pueden constar de 1 y 0; normalmente un número binario consta de 8 dígitos (o algún múltiplo de 8) si se utiliza en algún tipo de ordenador (o microcontrolador). Es útil saber cómo convertir un número binario en un número decimal y viceversa. Entonces, ¿cómo convertimos entre sistemas numéricos? En primer lugar, consideremos cómo determinamos el valor de un número decimal. El número 268 puede descomponerse como 200 + 60 + 8, o 2 * (10^2) + 6 * (10^1) + 8 * (10^0). Hay dos cifras importantes que debemos conocer para «deconstruir» el número: la base del sistema numérico y la ubicación del dígito dentro del número. La base de un número decimal es el 10. Cuando convertimos el número 268, el 2 es el segundo dígito, el 6 es el primer dígito y el 8 es el dígito cero. Cada dígito tiene que ser escalado de acuerdo con su lugar dentro del número. La escala del dígito es la base del sistema numérico elevada a la potencia de la ubicación del dígito en el número. Así que cada número se escala, y luego se suman todos los dígitos escalados para encontrar el valor total del número.
El mismo método se puede utilizar para encontrar el valor de un número binario. Por ejemplo, veamos el número 0b1011.0101. La base del sistema binario es 2 (el prefijo 0b se utiliza a menudo en el código para indicar que el número está en formato binario). El valor de nuestro número es: 1*(2^7)+0*(2^6)+1*(2^5)+1*(2^4)+0*(2^3)+1*(2^2)+0*(2^1)+1*(2^0), que es igual a 181.
0b1011.0101. ¡Qué manera más ineficiente de escribir un número! Pero podemos representar el mismo número binario utilizando sólo 2 dígitos hexadecimales. Primero, sin embargo, empezaremos por convertir un número hexadecimal a decimal como hicimos con un número binario. ¿Qué tal 0xB5? Espera, ¿qué? El prefijo 0x se utiliza en el código para indicar que el número se escribe en hexadecimal. ¿Pero qué hace la ‘B’ ahí? El formato hexadecimal tiene una base de 16, lo que significa que cada dígito puede representar hasta 16 valores diferentes. Desgraciadamente, después del ‘9’ nos quedamos sin dígitos numéricos, así que empezamos a utilizar letras. La letra «A» representa el 10, la «B» el 11, la «C» el 12, la «D» el 13, la «E» el 14 y la «F» el 15. La ‘F’ es el dígito más grande en el sistema de numeración hexadecimal. Convertimos el número de la misma manera que antes. El valor de 0xB5, entonces, es: B*(16^1)+5*(16^0) o 181.
Saber cómo convertir binario y hexadecimal a decimal es importante, pero la conversión de números más útil es probablemente convertir entre hexadecimal y binario. Estos dos sistemas de numeración funcionan bastante bien juntos. Los sistemas de numeración están relacionados de tal manera que un solo dígito hexadecimal representa exactamente 4 dígitos binarios, por lo que 2 dígitos hexadecimales pueden representar 8 bits (o dígitos binarios). Aquí hay una tabla que muestra cómo cada dígito hexadecimal está relacionado con el sistema binario:
Valor binario | Valor hexadecimal |
0000 | 0 |
0001 | 1 |
0010 | 2 |
0011 | 3 |
0100 | 4 |
0101 | 5 |
0110 | 6 |
0111 | 7 |
1000 | 8 |
1001 | 9 |
1010 | A |
1011 | B |
1100 | C |
1101 | D |
1110 | E |
11 | F |
Por ejemplo, para convertir el número hexadecimal 0x1C a binario, encontraríamos el valor binario correspondiente para 1 y C y los combinaríamos. Así, 0x1C en binario es 0b0001.1100. Si quisiéramos averiguar el valor hexadecimal de un número binario, simplemente haríamos el camino inverso. Para encontrar la representación hexadecimal del número binario 0b0010.1011 primero encontramos el valor hexadecimal de 0010, luego el valor hexadecimal de 1011 y los combinamos; el valor hexadecimal sería 0x2B.
Hay muchas herramientas gratuitas disponibles para ayudar a convertir entre estos sistemas de numeración, sólo hay que buscar en Google «conversión de números hexadecimales». Si usas Windows como sistema operativo tienes una gran herramienta integrada en la calculadora. Sólo tienes que cambiar la calculadora al modo científico y podrás convertir entre sistemas numéricos escribiendo un número y cambiando el formato de la calculadora.