Sistemas de numeración
Un sistema de numeración está compuesto por un determinado conjunto de símbolos y reglas que permiten representar un número de forma única. En la administración de sistemas y sobre todo en la programación, necesitamos saber como funcionan varios de estos sistemas, además de su conversión, para realizar nuestro trabajo. En Computación hablaremos de sistema decimal, octal, hexadecimal y sobre todo binario. Estos son sistemas de numeración son posicionales, ya que simplifican mucho la posibilidad de realizar operaciones aritméticas, pero hay más.
Las características de cada sistema los definen. Por ejemplo, en el sistema binario solo se utilizan dos símbolos (0 y 1), cada número viene determinado por una secuencia de símbolos que expresa un número determinado (1010₍₂₎), el valor de cada número depende de la posición de los símbolos, como veremos, y el valor total se obtiene sumando el valor de cada símbolo dependiendo de su posición.
Los sistemas de numeración se clasifican en tres tipos.
Sistemas no posicionales. Son aquellos en los que a cada símbolo le corresponde un valor fijo, sin importar la posición que ocupe dentro de la cifra.
Sistemas semi-posicionales. Son aquellos en los que el valor de un símbolo tiende a ser fijo, pero se puede modificar en situaciones particulares de aparición.
Sistemas posicionales. Son aquellos en los que el valor de un símbolo está determinado tanto por su propia expresión, como por el lugar que ocupe dentro de la cifra, pudiendo expresar distintos valores dependiendo de dónde se encuentre.
Sumario
Un poco de historia
Sistema de numeración decimal
Sistema de numeración binario
Sistema de numeración octal
Sistema de numeración hexadecimal
Conversión de cualquier sistema a decimal
Conversión de sistema decimal a cualquier otro
Conversión entre binario, octal y hexadecimal
Un poco de historia
Los sistemas de numeración aparecen en los albores de la humanidad, constituyendo uno de los principales avances de esta. Era necesario contar, presas, hombres, herramientas, ganado, etc… por ello cada civilización desarrolló o adoptó algún sistema.
Los sumerios, egipcios, aztecas, y griegos crearon sus propios sistemas, todos ellos no posicionales y representando números con geroglíficos, objetos cotidianos o letras que representaban el valor que ocupaban en su alfabeto.
Fue con los romanos cuando aparece un sistema semiposicional, que combina el valor fijo de cada símbolo con ciertas normas de posicionamiento. Esto facilitaba la representación de grandes números, pero planteaba problemas para la realización de operaciones aritméticas en un mundo en que cada vez era más necesario realizarlas.

Por ello cuando apareció el sistema de numeración indoarábigo, procedente de la India y heredado luego por los árabes musulmanes, se adoptó rápidamente en Occidente, donde penetró a través del Al-Ándalus y acabó reemplazando al sistema de numeración romano tradicional. En este sistema, similar al decimal moderno, se representan las unidades del 0 al 9 mediante glifos específicos, que representaban mediante líneas y ángulos el valor de cada uno. Cabe destacar que este sistema fue el primero que incluyó el símbolo del «0», que disparó la capacidad de los matemáticos para operar con números tan grandes como quisiesen y a emplearlo en operaciones aritméticas (suma, resta, multiplicación y división). Apoyados en ese concepto del cero, aquellos sobresalientes matemáticos del pasado, realizaron durante casi mil años (del siglo IV al XIII) una profunda y sosegada revolución de las matemáticas.

Sistema de numeración decimal
Desde tiempos muy remotos, el ser humano ha utilizado el sistema decimal, probablemente por la necesidad de contar con los diez dedos disponibles en las manos. El sistema decimal es un sistema posicional, que utiliza símbolos cuya significación depende de la posición relativa que ocupan dentro del número. Es decir, el símbolo 1 tomará un valor distinto dependiendo de de si está en la posición de las unidades, decena, centenas, unidades de millar, etc…
Se denomina decimal porque utiliza diez símbolos (0, 1, 2, 3, 4, 5, 6, 7, 8 y 9), por ello también se le llama sistema de base 10. Por ejemplo, el número 19848₍₁₀₎ donde el subíndice indica el sistema decimal.
Para números enteros, comenzando de derecha a izquierda, el primer dígito le corresponde el primer lugar (0), el de las unidades, de manera que el dígito se multiplica por 10⁰ (es decir 1) ; el siguiente dígito corresponde a las decenas (se multiplica por 10¹=10); el siguiente a las centenas (se multiplica por 10²=100); el siguiente a las unidades de millar (se multiplica por 10³=1000) y así sucesivamente, nombrándose este según su posición siguiendo la escala numérica de 0 a 9. El valor del número entero es la suma de los dígitos multiplicados por las correspondientes potencias de diez según su posición.
Por tanto 19848₍₁₀₎ =1*10000 + 9*1000 + 8*100 + 4*10 + 8*1, lo que equivale a su valor multiplicado por la base (10) elevada a la posición que ocupa, es decir 1*(10⁴ ) + 9*(10³) + 8*(10²) + 4*(10¹) + 8*(10⁰).
Sistema de numeración binario
El sistema de numeración binario, o de base 2, es un sistema posicional que utiliza 2 símbolos (0 y 1). También se le llama sistema diádico en ciencias de la computación. Es uno de los sistemas que se utilizan en las computadoras, debido a que estas trabajan internamente con dos niveles de voltaje, por lo cual su sistema de numeración natural es el sistema binario. En este caso el resultado es la suma de la multiplicación del valor por la base elevada a la posición que ocupa.

Por ejemplo 01101101₍₂₎ = 0*(2⁷) + 1*(2⁶) + 1*(2⁵) + 0*(2⁴) + 1*(2³) + 1*(2²) + 0*(2¹) + 1*(2⁰) = 0 + 64 + 32 + 0 + 8 + 4 + 0 + 1 = 109₍₁₀₎
Para definir números binarios podemos encontrar la declaración explícita (01101101 binario), el sufijo b o B (01101101₍ᵇ₎ ) o (01101101₍ᴮ₎) , o los prefijos bin (bin 01101101), % (%01101101) y ob (ob01101101), además del subíndice 2 (01101101₍₂₎) que es el más utilizado.
Sistema de numeración octal
El sistema de numeración octal (del griego oktō «ocho») es un sistema de numeración posicional cuya base es 8. Utiliza, por tanto, 8 símbolos (0, 1, 2, 3, 4, 5, 6 y 7), que tienen el mismo valor que el sistema decimal. En informática, en sistemas GNU/Linux, a veces lo utilizamos para la asignación de permisos a ficheros y directorios.
Este sistema nos permite la representación de números binarios de forma reducida, teniendo en cuenta que 2³ = 8, cada tres dígitos binarios equivalen a un dígito octal.
Por ejemplo 111 101₍₂₎ = 75₍₈₎
Como el sistema de numeración octal usa la notación posicional, entonces para el número 1456₍₁₀₎ tenemos que 1*(8³) + 4*(8²) + 5*(8¹) + 6*(8⁰) = 512 + 256 + 40 + 6 = 814₍₈₎
Sistema de numeración hexadecimal
El sistema de numeración hexadecimal es un sistema de numeración posicional que tiene como base el 16. Por tanto utiliza 16 símbolos (0, 1, 2, 3, 4, 5, 6, 7, 8 ,9, A, B, C, D, E y F), donde las letras corresponden a los siguientes valores numéricos decimales: A = 10, B = 11, C = 12, D = 13, E = 14 y F = 15.
Este sistema nos permite la representación de números binarios de forma reducida, teniendo en cuenta que 2⁴ = 16, cada cuatro dígitos binarios equivalen a un dígito hexadecimal.
Por ejemplo 1100 0011₍₂₎ = C3₍₁₆₎
En informática, como en las operaciones del CPU, se suele usar el byte como unidad básica de memoria, ya que un byte representa 2⁸ valores posibles, es decir 2⁸ = (2⁴)*(2⁴) = 16*16 ; dos dígitos hexadecimales corresponden exactamente a un byte.
En los lenguajes de programación, los números hexadecimales vienen indicados mediante el prefijo «0x». Esto lo vemos en las direcciones de memoria.
En la siguiente tabla podemos ver los valores equivalentes en cada notación.

Conversión de cualquier sistema a decimal
Para tenerlo más claro, vamos a ver algunos ejemplos.
Binario a decimal
Empezamos por convertir 1100 0011₍₂₎ a decimal. Para resolver esto nos puede resultar muy útil crear una tabla.

1100 0011₍₂₎ = 1*(2⁷) + 1*(2⁶) + 0*(2⁵) + 0*(2⁴) + 0*(2³) + 0*(2²) + 1*(2¹) + 1*(2⁰) = 128 + 64 +2 +1 = 195₍₁₀₎
Octal a decimal
Para convertir 303₍₈₎ a decimal, hacemos la tabla

303₍₈₎ = 3*(8²) + 0*(8¹) + 3*(8⁰) = 192 + 0 + 3 = 195₍₁₀₎
Hexadecimal a decimal
Y para convertir C3₍₁₆₎ a decimal…

El valor de C en hexadecimal, como hemos visto en la tabla de equivalencias, es 12. Por tanto
C3₍₁₆₎ = 12*(16¹) + 3*(16⁰) = 192 + 3 = 195₍₁₀₎
Conversión de sistema decimal a cualquier otro
Para convertir del sistema decimal a cualquier otro, tenemos que ir dividiendo sucesivamente entre la base de cada sistema de numeración e ir obteniendo los restos, sin decimales, hasta que el cociente sea 0. Después ordenamos los restos en orden inverso. Veamos unos ejemplos más clarificadores.
Decimal a binario
Para pasar un decimal a binario tenemos que dividir por la base 2. Por ejemplo para el número 83₍₁₀₎, el procedimiento es el siguiente,

Después escribimos los restos en orden inverso a como los hemos obtenido para obtener el valor en binario.
Decimal a octal
Para pasar un decimal a octal tenemos que dividir por la base 8. Por ejemplo para el número 83₍₁₀₎, el procedimiento es el siguiente,

Como vemos el procedimiento es el mismo. El valor decimal lo dividimos por la base de los números octales «8» y escribimos, en orden inverso los restos obtenidos.
Decimal a hexadecimal
Para pasar un decimal a hexadecimal tenemos que dividir por la base 16. Por ejemplo para el número 83₍₁₀₎, el procedimiento es el siguiente,

Y se repite el procedimiento. El valor decimal lo dividimos por la base de los números hexadecimal «16» y escribimos, en orden inverso los restos obtenidos.
Conversión entre binario, octal y hexadecimal
Binario a octal
Para convertir un número binario en octal, tenemos que dividir el número binario en grupos de 3 dígitos, comenzando por la derecha y rellenando con ceros por la izquierda, para completar si fuese necesario. Después se convierte cada grupo de tres dígitos binarios en un dígito octal. Lo vemos con un ejemplo. Para convertir el número 11010100₍₂₎ a octal, dividimos en grupos de tres dígitos, empezando por la derecha y añadiendo un cero al tercer grupo.
11010100₍₂₎ = [011] [010] [100]
Y ahora convertimos cada grupo a octal utilizando la tabla anterior o pasando estos a decimal.
[011] [010] [100] = [3] [2] [4]
Y obtenemos el numero octal 324₍₈₎
Para pasar de octal a binario el proceso es es contrario. Tenemos que expandir cada dígito octal en tres dígitos binarios.
Binario a hexadecimal
Hacer la conversión de binario a hexadecimal es un proceso parecido al anterior pero con la diferencia de que dividimos el número binario en grupos de cuatro dígitos de la misma manera, empezando por la derecha y añadiendo ceros si lo necesitamos por la izquierda. Siguiendo con el mismo ejemplo, para convertir el número 11010100₍₂₎ a hexadecimal…
11010100₍₂₎ = [1101] [0100]
Convertimos cada grupo a hexadecimal utilizando la tabla anterior o pasando estos a decimal.
[13] [4] en decimal y [D] [4] en hexadecimal. La notación será D4₍₁₆₎
Por tanto 11010100₍₂₎ = D4₍₁₆₎ = 324₍₈₎
Espero que sea útil esta explicación, ya que son conceptos que, a veces, cuesta comprender.
Si tienes algún comentario que hacer sobre este artículo, al pie del post tienes un formulario para hacerlo.
Si quieres contactar conmigo por cualquier otro asunto relacionado con el sitio, en la página de contacto, tienes un formulario más adecuado.
Y para suscribirte y recibir las novedades publicadas, tienes un enlace en el pie de la página o desde aquí mismo.
Gracias Javier. Una buena base de conocimientos
Gracias Barto. Me alegro de que te resulte interesante.