Muchas personas tienen dificultades cuando empiezan en carreras técnicas, especialmente en programación y en redes, dado que muchas tareas tienen que ver con cálculos en binario, por ejemplo, la creación de subredes. Con el transcurso de los años, he detectado (y me han enseñado) algunas observaciones que hacen que los cálculos en binario sean mucho más fáciles de lo que en principio son, así que en esta entrada les comparto esas experiencias que yo llamo «trucos» que facilitan la conversión de decimal a binario (y viceversa). Ésta entrada no reemplaza una clase presencial de un experto en la materia, aún así, comienzo explicando cómo funcionan los sistemas de numeración posicionales para que exista una base teórica clara. Disfrútenlo.
NOTA: El título correcto de ésta entrada debería decir «conversión de binario a decimal fácilmente» y no sólo «binaria fácil», pero sé que lo encuentran más fácil con éste título que con el correcto, así que me disculpo.
Sistemas de numeración posicionales
El sistema de numeración binario es una forma de contar usando sólo los dígitos 0 y 1, similar a nuestro sistema decimal que usa los símbolos 0 a 9. Ambos sistemas se denominan posicionales dado que la posición de un dígito particular en una cifra determina qué cantidad representa (o cuánto vale), por ejemplo en la cifra 2153 el dos vale 2000 unidades (de lo que sea que se esté contando), el 1 significa 100 unidades, el 5 representa 50 y, finalmente, el 3 son sólo 3 unidades, es decir, 2153 son 2000 + 100 + 50 + 3 = 2153. Si el número anterior no fuera 2153 sino 2152, aunque el número 2 aparece dos veces en la cifra, significa dos cantidades totalmente diferentes, uno representa 2000 unidades y otro sólo 2.
El sistema decimal toma su nombre del hecho de que usa 10 dígitos distintos (lo cual coincide con la cantidad de dedos que tenemos en las manos) y también se le llama sistema en base 10. Cuando hay posibilidad de confusión sobre la base de una cifra se agrega un subíndice al final de ésta para notar la base, p. ej.: 10010 es el valor cien, pero representa una cantidad totalmente diferente de 1002 que en realidad representa 4 unidades.
En un sistema posicional, un dígito en la primera posición (de derecha a izquierda) representa unidades rasas, es decir, 9 son nueve unidades, 5 son 5 unidades, pero si la cifra es igual o mayor a la base (10 en éste caso) se usa la posición para indicar que el dígito representa mucho más que lo que vale solito (o en la primera posición), por ejemplo diez unidades se representan en decimal como la cifra 10 porque el 1 ya representa una decena (10×1 = 10) más cero unidades rasas (10×0 = 0), así mismo 100 significa 1*100, más cero decenas y cero unidades. Como se observa, un dígito particular se debe multiplicar por el valor de su posición (contando las posiciones desde cero) para saber cuántas unidades representa, por ejemplo: 300 es 3*102 = 3*100 = 300. El valor o peso de un dígito es la base elevada a la posición que ocupa contando desde cero, es decir, el peso de la primera posición de una cifra en base 10 vale 100, es decir 1, la segunda posición vale 101, es decir 10 unidades, la tercera es 102 y así sucesivamente.
Los conceptos anteriores son muy fáciles de comprender porque estamos acostumbrados a contar en sistema decimal usando base 10, sin embargo, cuando pasamos a otra base se nos dificulta un poco porque ya no es intuitivo saber cuánto representa una cantidad escrita en otro sistema, por ejemplo si yo escribo la cifra 11002 no es evidente cuántas unidades representa, como es base 2, significa que cada dígito se multiplica por una potencia de dos y no una de 10 como acostumbramos.
Hay que notar dos cosas antes de seguir: 1) Cualquier número elevado a la cero es 1 (20=1, 80=1, 100=1, etc.), 2) Todos los sistemas de numeración cuentan las posiciones desde cero; de lo anterior se deduce que el número menos significativo en cualquier sistema de numeración representa unidades.
Primer truco: potencias de dos
Empezando con el sistema binario, las potencias de dos son muy fáciles de deducir (o calcular) porque son el doble del valor anterior, si 20=1, 21=2, 22=4, 8, 16, 32, 64, 128, 256, 512, 210=1024, etc. Según lo anterior, saber cuántas unidades representa un número en binario es un juego fácil: si un dígito sólo puede ser cero o uno, lo único que tengo que hacer para saber cuánto representa una cifra binaria es sumar el valor de las posiciones en las cuales hay unos en la cifra binaria. Por ejemplo: 1100 es 8+4=12, porque el último 1 vale 23=8 y el penúltimo vale 22=4. Básicamente, se multiplican los unos por el valor de su posición y se suman, pero esta definición es más complicada de lo que debe, en realidad el binario es el sistema de numeración más simple que existe, en una cifra en decimal la multiplicación y la suma son complicadas porque un dígito puede ser un número de 0 a 9 pero en binario sólo es 1 ó 0, es decir se cuenta (y suma) la posición o no, lo cual lo hace intuitivo, casi trivial. En conclusión, el primer truco es saberse las potencias de dos.
Ejercicio: Para las siguientes cifras en binario, halle el valor decimal que representan:
- 10002 en decimal es: __________
- 01102 en decimal es: __________
- 10012 en decimal es: __________
Segundo truco: potencias de dos menos uno
El primer nivel de dificultad está resuelto si sabemos cómo funcionan los sistemas posicionales particularmente el sistema binario, es decir, sumar potencias de dos. Llamemos a éste primer truco potencias de dos, dado que consiste en saber las potencias de dos o saber calcularlas (trivial, ¿o no?). Sin embargo, a pesar de lo fácil que puede ser obtener éstas potencias y sumarlas, un número binario grande puede llegar a ser difícil de convertir si hay que hacer muchas sumas, por ejemplo el número 11111112 significa sumar 64+32+16+8+4+2+1 = 127. El cálculo anterior no es física cuántica pero puede resultar engorroso, por lo cual resulta muy útil notar un par de patrones interesantes que son la base de los otros trucos.
Un número binario que sólo contenga un bit en uno y el resto en cero es trivial: debe ser una potencia de dos y sólo tengo que recordar que las potencias de 2 comienzan en el valor 1 (20=1, el bit menos significativo) y duplico el valor cada vez que aumente de posición hasta llegar a la posición del bit que está en uno: 10000000 = 128, porque si duplico 1 siete veces obtengo 128 (27). De la misma manera, para saber cuánto es el número 10000000000000 = 8192 (213) (duplico 13 veces) o uno más fácil: 100000 es 32 (25 o 1 duplicado 5 veces).
Luego hay que notar otro patrón interesante (segundo truco, potencias de dos menos uno): cualquier número que sea una potencia de dos menos uno está compuesto por una serie de unos: 11111 = 31 (note que 31 es 32-1), 63=111111 (64-1), 1111111=127 (128-1) y así. Tengan en cuenta que cuando se calcula un número de éstos, el bit más significativo no es la potencia de 2 a la que le restamos 1, es la potencia de dos anterior a la que le restamos 1 (los bits más significativos en los tres ejemplos anteriores son 16, 32 y 64 que en realidad no están en los ejemplos). Yo les recomiendo practicar mucho y comprobar todo resultado hasta que se tenga suficiente práctica en ello.
Ejercicio. Teniendo en cuenta los patrones anteriores, halle el valor decimal de los siguientes números:
- 1112 en decimal es: __________
- 100000002 en decimal es: __________
- 1111111111112 en decimal es: __________
Tercer truco: mezclarlos anteriores
El peligro de los trucos anteriores es que no se hagan los cálculos con cuidado, los trucos descritos no implican que podamos deducir cuánto representa una cifra binaria con sólo mirarla, de hecho, el error más común en éste tipo de conversiones es no contar bien las potencias de dos, por ejemplo comenzando por 2 (21) en vez de por 1 (20) o simplemente contando mal la cantidad de dígitos (contar 6 bits en vez de 7 o 9 en vez de 8). En otras palabras, reconocer los patrones nos ahorra un trabajo que puede ser engorroso pero no nos libera de calcular y tener mucho cuidado con la conversión. Lo mejor para aprender algo es no mecanizarlo desde un principio, sino dejar que la mecanización aparezca con la maestría (muchos ejercicios), así que no se confíen.
Una vez que recordamos los dos trucos anteriores (potencias de dos y potencias de dos menos uno), se puede jugar con el concepto de numeración posicional para encontrar más números sin tener que hacer cálculos complejos. Por ejemplo, ¿qué valor decimal representa el número 10001111?, el sistema posicional nos dice que hay que sumar todos los unos multiplicados por su potencia, sin embargo según el primer truco, el bit más significativo vale 128 (27) y según el segundo truco, los últimos cuatro bits deben ser una potencia de dos menos uno (de hecho es 16-1, porque el bit nro. 5 es 24=16), por lo tanto el número descrito es 128+15=139, en vez de 128+8+4+2+1. De nuevo, no es que sea mecánica cuántica pero sí nos ahorra algún minuto de cálculos, sobre todo cuando hablamos de números grandes, por ejemplo: 1000011111111, el cual, inmediatamente sé que es 4096+255=4351, lo que sin los “trucos” sería 4096+128+64+32+16+8+4+2+1. El primer cálculo se puede hacer en la mente con confianza, el segundo no necesariamente (o bueno sólo algunas mujeres 😉 ).
Ejercicio: Use los trucos anteriores para determinar el valor decimal que
representa cada una de las siguiente cifras binarias:
- 100001112 en decimal es: __________
- 1000111112 en decimal es: __________
- 001011112 en decimal es: __________
Cuarto truco: restar en vez de sumar
La última recomendación para facilitar la conversión mental es ser muy práctico(a). Con los patrones binarios descritos en las secciones anteriores, se tienen herramientas para lograr una capacidad interesante de hacer conversiones rápido, mentalmente y con mucha confianza, sin embargo no todos los números binarios caerán en las categorías anteriores. Existen números cuya conversión es más difícil, por ejemplo, el número 11110000 no se ajusta a ninguno de los patrones anteriores, la única solución a éstas alturas es sumar las potencias de dos: 128+64+32+16=240. Una forma más fácil de haber hecho el cálculo anterior sería haber notado que 8 bits en uno son 255 (28 – 1=255), sin embargo a éste número le faltan los primeros 4 bits, en otras palabras, podría haber hecho 255-15=240, el cual es un cálculo más fácil que el primero. Ésta última forma de calcular los valores decimales es muy poderosa, porque nos invita a pensar que cuando un número binario tiene muchos unos, es más fácil tomar la potencia de dos menos uno más cercana (mayor que el número objetivo) y restarle los valores de las posiciones en las cuales haya ceros: 1111110111, en éste número hay 10 bits, es decir, debe ser una cantidad cercana a 1024 (210) específicamente 1023 (1024-1) pero restándole la potencia 3 (23=8), es decir 1023-8=1015. Y así mismo, si el número no tuviera sólo un cero sino unos cuantos, todavía podría ser más fácil restar que sumar. En otras palabras, tomar siempre como pivote del cálculo un número que sea una potencia de dos menos uno: piensa diferente, no potencias de dos sino potencias de dos menos uno.
Ejercicio: Calcule el valor decimal de los siguientes números binarios:
- 111110002 en decimal es: __________
- 101111102 en decimal es: __________
- 111011002 en decimal es: __________
- 101101102 en decimal es: __________
- 011101112 en decimal es: __________
Conclusiones
En realidad faltan muchas más observaciones sobre la conversión entre sistemas posicionales, yo lo único que describí es lo que la práctica me ha dado durante éstos años. La conversión numérica es un juego de sumas simples y con los cuatro "trucos" descritos puede ser muy entretenida.
También debería reconocer, que éste texto sólo habla de conversión de binario a decimal, a diferencia de la mayoría de los textos los cuales clasifican los contenidos en conversión de binario a decimal y luego de decimal a binario. En realidad, todo lo que he escrito funciona en ambas vías, sólo hay que tener un poco de práctica. En una futura ocasión escribiré sobre conversión decimal a binario (aunque sé que se parecerá mucho a ésta entrada).
Para resumir:
- Aprende las potencias de dos (mínimo hasta la 10)
- Las potencias de dos menos uno son tus amigas
- Trabájalas juntas y serás un maestro
- A veces es más fácil restar que sumar.
Como les dije, la conversión binaria es un juego, Cisco publicó hace años este juego en Flash (ojalá no lo quiten pronto) que es como un tetris de conversiones binarias. Inténtalo y observa tu progreso.
UPDATE Enero 2020: Gracias a una lectora, me dí cuenta que el juego sí lo habían quitado. Ya lo corregí pero igual es un juego en FLASH, por lo que habría que habilitarlo en caso de que lo quieran jugar.
cesar, este post me fue muy útil, gracias por darle tiempo a este trabajo y pasión que son las redes, la informática…saludos.
Amigo, muy bien por mostrar algunos trucos en base 2, será muy útil para novatos y expertos que no se hayan dado cuenta de eso. Al final tiene un pequeño error, 1111110111 = 2^10-1 + 2^3 = 1024 -1 + 8 = 1015.
Hola Edwin,
gracias por el comentario. Tienes toda la razón, ya cambié el error, pero en tu observación sumaste en vez de restar.
Gracias y hasta pronto.