Las sencillas matemáticas que hay detrás de los algoritmos de conversión decimal-binario

Si buscas en la web «Cómo convertir de decimal a binario» encontrarás cuatro sencillos algoritmos: dos para los enteros y dos para las fracciones. En la primera parte del artículo se presentan con ejemplos, pero aunque conocer los algoritmos es casi siempre suficiente, he decidido intentar entender por qué funcionan. En la segunda parte, este artículo explica las matemáticas básicas que hay detrás de cada uno de ellos. Saberlo puede ayudarte a recordar alguno de los algoritmos si los olvidas de repente. Te sugiero encarecidamente que cojas un bloc de notas y un bolígrafo y realices las operaciones junto conmigo para recordar mejor las matemáticas.Aquí están los cuatro algoritmos con ejemplos que puedes encontrar en la web.

Conversión de entero decimal a binarioEnlace a esta sección

Para convertir entero a binario, empieza con el entero en cuestión y divídelo entre 2 fijándote en el cociente y el resto. Continúa dividiendo el cociente entre 2 hasta que obtengas un cociente de cero. A continuación, simplemente escriba los restos en el orden inverso.

Aquí hay un ejemplo de dicha conversión utilizando el entero 12.
Primero, dividamos el número entre dos especificando el cociente y el resto:

Ahora, simplemente tenemos que escribir el resto en el orden inverso -1100. Así, 12 en el sistema decimal se representa como 1100 en binario.

Convertir fracción decimal a binariaEnlace a esta sección

Para convertir la fracción a binario, empieza con la fracción en cuestión y multiplícala por 2 fijándote en el entero resultante y en la parte fraccionaria. Continúa multiplicando por 2 hasta que obtengas una parte fraccionaria resultante igual a cero. A continuación, simplemente escribe las partes enteras del resultado de cada multiplicación.

Aquí tienes un ejemplo de dicha conversión utilizando la fracción 0,375.

Ahora, simplemente escribamos la parte entera resultante en cada paso – 0,011. Así, 0,375 en el sistema decimal se representa como 0,011 en binario.

Convertir entero binario a decimalEnlace a esta sección

Para convertir entero binario a decimal, empieza por la izquierda. Tome su total actual, multiplíquelo por dos y añada el dígito actual. Continúe hasta que no queden más dígitos.Aquí hay un ejemplo de dicha conversión usando la fracción 1011.

Conversión de fracción entera a decimalEnlace a esta sección

Para convertir fracción binaria a decimal, empieza por la derecha con el total de 0. Tome el total actual, sume el dígito actual y divida el resultado por 2. Continúe hasta que no queden más dígitos. Aquí hay un ejemplo de dicha conversión usando la fracción 0.1011. Simplemente he sustituido la división por 2 por la multiplicación por 1/2.

Aquí tienes 4 sencillos algoritmos que te permitirán convertir números binarios a decimales y viceversa.

Expansión base-q de un númeroEnlace a esta sección

La clave para entender por qué funcionan esos algoritmos es un base-q expansion de un número. Un número entero en cualquier sistema numérico se puede representar de la siguiente forma:

donde,

  • N es el número entero
  • x es el dígito (0 a 9 para el sistema de base-10, 0 y 1 para el sistema de base-2)
  • q es el valor de la base (10 para el sistema de base-10, 2 para el sistema de base-2)
  • A lo largo de este artículo se hace referencia a esta forma como base q expansion of the number N, o simplemente base q expansion. Veamos cómo queda el número 12 en los sistemas decimal y binario:

    Así mismo, un número fraccionario en cualquier sistema numérico se puede representar de la siguiente forma:

    Donde,

    • N es una fracción
    • x es el dígito (0 a 9 para el sistema de base-10, 0 y 1 para el sistema de base-2)
    • q es el valor de la base (10 para el sistema de base-10, 2 para el sistema de base-2)
    • Para el número 0.375 en los sistemas decimal y binario la representación es la siguiente:

      Conversión de entero decimal a binarioEnlace a esta sección

      Resulta que podemos utilizar esta forma de expansión de base-q para convertir un número del sistema decimal al binario. Hagámoslo para el mismo número 12. Primero, hagamos como si no supiéramos cómo se representa en el binario y lo escribimos con los dígitos desconocidos sustituidos por x:

      Nuestra tarea es encontrar todas las x. Veamos qué podemos hacer aquí.Lo primero que debemos notar aquí es que todos los sumandos, excepto el último, serán números pares, porque todos son múltiplos de dos. Ahora, usando esta información podemos inferir el dígito para el x0 – si el entero que se convierte es par, entonces x0 es igual a 0, si es impar – entonces x0 debe ser 1. Aquí tenemos el número 12 que es par, por lo que x0 es cero. Escribamos esta información:

      A continuación, tenemos que encontrar el valor de x1. Como todos los sumandos desde x1 hasta xN son múltiplos de dos, podemos factorizar 2 para sacar x1. Hagámoslo:

      También es fácil ver que la suma de los valores dentro del paréntesis es igual a 6. Así que podemos escribir nuestro primer paso como:

      Continuemos averiguando las x restantes. Podemos escribir el polinomio dentro del paréntesis como un enunciado independiente:

      Aquí, aplicando la misma lógica de arriba podemos ver que x1 es igual a 0. Volvamos a escribirlo y también a factorizar 2 de nuevo:

      Así, nuestro segundo paso es:

      Ahora, podemos ver un patrón. Podemos seguir factorizando 2 hasta que el cociente sea cero. Sigamos este patrón y veamos qué obtenemos.

      Como el cociente es igual a 1, sólo queda un sumando, así que reescribamos la expresión anterior:

      Entonces, nuestro tercer paso es:

      Así, terminamos con lo siguiente:

      Está claro que x3 es igual a 1. Pero, como para nuestro algoritmo necesitamos un cociente, reescribamos la expresión anterior para que tenga un cociente:

      Como acabamos con el cociente de 0, no hay nada más con lo que trabajar y éste era nuestro último paso. Escribámoslo:

      Así que ahora hemos terminado la conversión. Así es como queda nuestra conversión por pasos:

      Ahora está claro que el resto en cada paso corresponde al valor de las x en las posiciones correspondientes: el primer resto corresponde a la primera x, el segundo resto a la segunda x y así sucesivamente. Así que el número 12 en binario utilizando el algoritmo descrito anteriormente se representa como 1100.

      Recuerda que empezamos con la idea de mostrar por qué funciona el algoritmo que implica bucear por 2. Tomemos los pasos descritos anteriormente y movamos el 2 a la parte izquierda de las expresiones:

      Así que de esta manera puedes ver cómo llegamos al algoritmo descrito en el principio. También podemos poner los cálculos de esos cuatro pasos en una representación como esta

      Asegúrate de que entiendes cómo llegamos a esa representación ya que la necesitaremos cuando exploremos cómo funciona el algoritmo de conversión de binario a decimal.

      Conversión de fracción decimal a binariaEnlace a esta sección

      Para mostrar por qué multiplicamos por 2 y tomamos la parte entera al convertir fracciones a binario, también voy a utilizar la forma de expansión de base-q para las fracciones. Voy a utilizar el número fraccionario 0,375 de la primera parte del artículo. De forma similar a la parte de los enteros, vamos a fingir que no sabemos cómo se representa este número en el binario y lo escribimos con los dígitos desconocidos sustituidos por x:

      Al igual que con los enteros, nuestra tarea es encontrar todas las x por separado. Veamos cómo podemos hacerlo. Lo primero que hay que notar aquí es que las potencias negativas de 2 nos dan fracciones con el denominador de 2 con potencias positivas. Reescribamos la expresión anterior:

      Es inmediatamente obvio que podemos simplemente factorizar 1/2 en la parte derecha de la expresión. Hagámoslo:

      y entonces podemos mover 1/2 a la parte izquierda

      Bien, aquí hemos señalado x1, y sabemos que puede ser 1 o 0. Para determinar qué dígito tiene vamos a ver los restantes sumandos:

      Pensemos en lo grande que puede ser la suma de estos números. Si el número máximo de dígitos de x es 1, entonces podemos simplemente sustituir las x por 1 y escribir la suma como:

      Bueno, esta es una serie geométrica de fracciones, y la suma de dicha serie se encuentra en los límites , por lo que el número máximo que nos puede dar dicha suma es 1. Veamos ahora de nuevo nuestra expresión:

      Ahora bien, aquí debe quedar claro que si el lado derecho es menor que 1, entonces x1 no puede ser igual a 1 y por tanto es igual a 0, mientras que la parte restante es igual a 0,75.

      Esto se ve exactamente como el primer paso del algoritmo presentado al principio:

      Sacamos la parte fraccionaria de 0.75 y factoricemos otra 1/2 para sacar x2:

      y movamos 1/2 a la izquierda:

      Ahora, si x2 es igual a 0, entonces la suma del lado izquierdo de la expresión no puede ser mayor que 1, pero el lado izquierdo es 15, por lo que x1 debe ser 1 y la parte restante 0,5. Escribámoslo:

      De nuevo, esto sigue el patrón del algoritmo presentado al principio:

      Repitamos las mismas acciones para la parte fraccionaria restante de 0.5.

      Utilizando la misma lógica que en el caso anterior podemos ver que x3 es igual a 1 y no hay parte fraccionaria restante:

      Como la parte fraccionaria restante es igual a 0, así queda nuestro último paso:

      Así que vamos a escribir de nuevo todos los pasos:

      Esto es exactamente el algoritmo que presenté al principio. Al igual que hicimos con los enteros, también podemos poner los cálculos de esos tres pasos en una representación como esta:

      De nuevo, es importante que entiendas bien esta representación ya que la necesitaremos cuando exploremos la conversión de binario a decimal.

      Por qué no todas las fracciones pueden representarse finitamente en binarioEnlace a esta sección

      El hecho de que algunas fracciones representadas finitamente en el sistema decimal no puedan representarse finitamente en el sistema binario sorprende a muchos desarrolladores. Pero esta es precisamente la confusión que está en la raíz del aparentemente extraño resultado de sumar 0,1 a 0,2. Entonces, ¿qué determina que una fracción pueda representarse finitamente en un sistema numérico? Pues bien, para que un número sea representado finitamente, el denominador de una fracción debe ser una potencia de la base del sistema. Por ejemplo, para el sistema de base 10, el denominador debe ser una potencia de 10, por eso podemos representar finitamente 0.625 en decimal:

      y no podemos representar finitamente 1/3:

      Lo mismo ocurre con el sistema de base 2:

      Pero si comprobamos 0.1, el denominador es 10 y no es una potencia de 2, por lo que 0,1 va a ser una fracción infinita en el sistema binario. Veámoslo usando el algoritmo que aprendimos arriba:

      Podemos seguir haciéndolo infinitamente, pero vamos a escribirlo como fracción continua periódica:

      Conversión de entero binario a decimalEnlace a esta sección

      Voy a utilizar el mismo entero binario 1011 de la primera sección para mostraros por qué funciona el algoritmo de multiplicar por 2. Aquí también utilizaremos la forma de expansión en base Q del número. Escribámoslo de esta forma:

      Como todos los sumandos son múltiplos de 2, podemos seguir factorizando 2 hasta que el cociente sea cero. Hagámoslo:

      Ahora, si simplemente sigues el orden de las operaciones matemáticas acabarás exactamente con los mismos pasos que he mostrado al principio, en concreto:

      De esta manera 1011 en binario es 11 en decimal.

      Convertir fracción binaria a decimalEnlace a esta sección

      Ahora, hemos llegado al último algoritmo. Probablemente, ya te habrás dado cuenta de la mecánica que hay detrás. Si no es así, vamos a ver por qué funciona. La forma de expansión base-q del número es la clave aquí también. Tomaremos el número 0,1011 de la primera sección. Escribámoslo en la forma expandida:

      De nuevo, como todos los sumandos son múltiplos de 1/2, podemos seguir factorizando 1/2 hasta que no quede ninguna parte fraccionaria. Hagámoslo:

      Siguiendo el orden de las operaciones matemáticas se obtiene el algoritmo planteado al principio:

      De esta forma 0.1011 en binario es 0.6875 en decimal.

      Discute con la comunidad

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *