Aritmética binaria
Getting your Trinity Audio player ready...

Hoy vamos a ver algo que se sale un poco de la tónica habitual de este blog. Pero, siempre viene bien volver a las bases de la informática. Así que espero que esta pequeña introducción al sistema binario y a su aritmética, pueda serte útil.

Sistemas de Numeración

Un sistema de numeración lo podemos definir como un conjunto de reglas y convenios que nos permiten la representación de todos los números mediante varias cifras o símbolos. Los múltiples sistemas de numeración que existen podemos agruparlos principalmente en dos familias:

Por un lado, están los que se rigen por reglas estrictas sin importar dónde esté la cifra o el símbolo. Estos son los sistemas basados en el Valor Absoluto. Un ejemplo de esto es el sistema de numeración romana, que utiliza las letras I, V, X, L, C, D y M. En este sistema, el valor de una letra siempre es el mismo, sin importar su posición dentro del número. Por ejemplo, el valor de C siempre será 100 independientemente de su posición:

  MC = 1000 + (100)
 CII = (100) + 1 + 1
 MCX = 1000 + (100) + 10
CDLI = (-100) + 500 + 50 + 1

Por otro lado tenemos a los sistemas basados en valores relativos. En este caso el mismo símbolo puede representar valores diferentes dependiendo de dónde esté ubicado en el número. El sistema decimal es el más destacado y conocido entre estos sistemas de numeración.

El sistema decimal fue ideado en la India en el siglo V a.C., posteriormente traído a Europa por los árabes en la Edad Media. Su base es el número diez, habiéndose elegido este número por ser diez los dedos de las manos y emplearse habitualmente éstos para contar. Este sistema consta de diez dígitos diferentes: 0, 1, 2, 3, 4, 5, 6, 7, 8 y 9; con los que debidamente agrupados puede representarse cualquier número.

En el sistema decimal cada signo tiene un valor dependiendo del lugar que ocupa. Y este valor viene dado por su valor absoluto multiplicado por potencias de 10 sucesivas (10⁰, 10¹, 10², etc.). Así el número cuatro mil trescientos cincuenta y dos equivaldrá a:

4×10³ + 3×10² + 5×10¹ + 2×10⁰ =
4000  + 300   + 50    + 2 =
4352

Sistemas de numeración con valores relativos

La construcción de un sistema de numeración basado en valores relativos seguirá la definición siguiente:

El valor decimal de un número es igual a la suma de los valores de los dígitos o símbolos correspondientes, multiplicados por la base elevada a la potencia definida por su posición.

es decir, si:

N = valor decimal de un número
B = base del sistema numérico
S = símbolo de cada posición
T = total de cifras que tiene el número

será:

N = Sₜ × Bᵗ⁻¹ + Sₜ₋₁ × Bᵗ⁻² + ... + S₁ × B⁰

Por ejemplo, si partimos del número 561₈, de tres cifras (T = 3) y con base ocho (B = 8), tendríamos la siguiente conversión a decimal:

N = 5×8² + 6×8¹ + 1×8⁰ =
    320  + 48   + 1    =
    369

Con lo que tenemos que el valor decimal del número 561 en base 8 es 369; lo que podemos expresar como 591₈ = 369₁₀.

Equivalencias entre sistemas de valores relativos

En la tabla siguiente se pueden observar las equivalencias de distintos sistemas de numeración.

Decimal (10)Quinario (5)Octal (8)Duodecimal (12)Hexadecimal (16)
00000
11111
22222
33333
44444
5555
6666
7777
888
999
10AA
11BB
12C
13D
14E
15F

Sistema Binario (Base 2)

El sistema binario, es la piedra angular del mundo de la informática. Es más, sólo nos tenemos que detener en el significado de bit, para comprobar como es una abreviatura de "binary digit" o dígito binario.

Este sistema utiliza solamente dos símbolos diferentes: 0 y 1. En el mundo informático esto es justo lo que representa un bit de información, podemos hablar de verdadero y falso, encendido y apagado, etc.

Pero, ¿por qué es tan crucial el sistema binario en la programación? Básicamente por dos razones entre otras:

  1. Eficiencia: Las computadoras digitales utilizan el sistema binario debido a su eficiencia. Es más fácil construir máquinas que solo necesitan distinguir entre dos estados.
  2. Operaciones lógicas: Las operaciones fundamentales de la lógica booleana (AND, OR, NOT, etc.) se pueden representar y manipular fácilmente en el sistema binario.

Conversión de decimal a binario

Para convertir enteros decimales a la notación binaria, tan sólo hay que dividir el número decimal por 2 hasta que el cociente sea cero. Los restos de cada división formarán el número binario equivalente; el primer resto será la cifra que se encuentre más a la derecha mientras que el último resto será la cifra que se encuentre más a la izquierda.

Como ejemplo, vamos a convertir el número 13 a su valor binario:

13 : 2 = 6 + (1)
 6 : 2 = 3 + (0)
 3 : 2 = 1 + (1)
 1 : 2 = 0 + (1)

Si ahora le damos la vuelta a los restos que hemos obtenido, nos queda que:

13₁₀ = 1101₂

Cuando el cociente sea 1, también puedes usar dicho cociente en lugar de tener que hacer una nueva división. Esto se ve mejor si expresamos la división con otro formato. Si paramos cuando el cociente sea 1, usando el ejemplo anterior tendríamos lo siguiente:

13 |_2_
(1)  6 |_2_
    (0)  3 |_2_
        (1) (1)

Conversión de binario a decimal

Al igual que con el resto de sistemas de numeración, cada símbolo tiene un valor en función del lugar que ocupa. Así, por ejemplo, el valor decimal del número 101011₂ es:

N = 1×2⁵ + 0×2⁴ + 1×2³ + 0×2² + 1×2¹ + 1×2⁰ =
    32   +   0  +   8  +   0  +   2  +   1 = 43
101011₂ = 43₁₀

Otro método muy utilizado es el denominado duplicidad y suma. La manera de proceder en este método es la siguiente:

  • Se multiplica por 2 la cifra de orden superior, la que está más a la izquierda del número.
  • Al producto se le suma el valor de la cifra de la derecha.
  • La suma obtenida se multiplica por 2.
  • Al producto obtenido se le suma la cifra a la derecha.
  • Se repite la operación hasta que no nos queden cifras a la derecha.

Veamos la conversión por este sistema del mismo número del ejemplo del caso anterior, es decir con el número 101011₂:

Multiplicamos por 2 la cifra mayor: (1)01011  |   1₅ × 2  = 2
Le sumamos la cifra siguiente: 1(0)1011       |   2  + 0₄ = 2

Multiplicamos por 2 el nuevo resultado        |   2  × 2  = 4
Le sumamos la cifra siguiente : 10(1)011      |   4  + 1₃ = 5

Multiplicamos por 2 el nuevo resultado        |   5  × 2  = 10
Le sumamos la cifra siguiente: 101(0)11       |  10  + 0₂ = 10

Multiplicamos por 2 el nuevo resultado        |  10  × 2  = 20
Le sumamos la cifra siguiente: 1010(1)1       |  20  + 1₁ = 21

Multiplicamos por 2 el nuevo resultado        |  21  × 2  = 42   
Le sumamos la cifra siguiente: 10101(1)       |  42  + 1₀ = 43

Fracciones

Conversión de fracciones decimales en binarias

En general el proceso de conversión de un sistema a otro de la parte fraccionaria de un número es diferente al utilizado para la parte entera. Con frecuencia este proceso es el inverso para la fracción.

Para convertir una fracción decimal en binaria se multiplica la fracción binaria por 2, correspondiendo la parte entera del producto al primer dígito binario. Se repite la operación con la parte decimal del producto anterior obteniendo un nuevo entero que será el siguiente dígito binario. Así sucesivamente hasta que la fracción quede reducida a cero, o se haya quedado una cantidad suficiente de dígitos binarios, en el caso de una fracción periódica.

Ejemplo: convertir la fracción decimal 0,828125 en fracción binaria.

0,828125 × 2 = 1,656250  | 1
0,656250 × 2 = 1,312500  | 1
0,3125   × 2 = 0,6250    | 0
0,625    × 2 = 1,250     | 1
0,25     × 2 = 0,50      | 0
0,5      × 2 = 1,0       | 1

0,828125₁₀ = 0,110101₂

Si tuviéramos un número con parte decimal y fraccionaria, podemos hacer las conversiones en dos partes:

134,3125₁₀

134 : 2 = 67 + 0
 67 : 2 = 33 + 1
 33 : 2 = 16 + 1
 16 : 2 =  8 + 0
  8 : 2 =  4 + 0
  4 : 2 =  2 + 0
  2 : 2 =  1 + 0
134₁₀ = 10000110₂

0,3125 × 2 = 0,625 | 0
0,625  × 2 = 1,250 | 1
0,25   × 2 = 0,50  | 0
0,5    × 2 = 1,0   | 1

134,3125₁₀ = 10000110,0101₂

Conversión de fracciones binarias a decimales

El método más cómodo de conversión, resulta del desarrollo del número binario en sus respectivas potencias de 2, con exponente negativo descendente de izquierda a derecha.

0,110101₂ = 0×2⁰ + 1×2⁻¹ + 1×2⁻² + 0×2⁻³ + 1×2⁻⁴  + 0×2⁻⁵ + 1×2⁻⁶    =
            0    + 1/2   + 1/4   + 0     + 1/16   + 0     + 1/64     =
            0    + 0,5   + 0,25  + 0     + 0,0625 + 0     + 0,015625 = 0,828125
0,110101₂ = 0,828125₁₀

Suma binaria

En esencia, la suma binaria es muy semejante a la suma decimal; la tabla de sumar binaria, es mucho más reducida que la decimal, como se puede observar a continuación.

0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 10

Al sumar 1 + 1 en sistema binario, se excede el límite de la cuenta, ya que sólo disponemos de los símbolos 0 y 1, y en consecuencia, el resultado será 0 con acarrreo de 1 a la posición inmediata superior.

Veamos a continuación dos ejemplos de suma binaria. El primero no necesita comentarios, basta con seguir la tabla de sumar binaria.

 100100
+ 10010
-------
 110110

El segundo tiene varios acarreos de 1. Así que para que se pueda entender un poco mejor, se ha indicado con super-índices encima de los valores afectados:

 ₁  ₁₁
  11011
+ 10011
-------
 101110

Resta binaria

Las reglas de la resta binaria aparecen esquematizadas a continuación:

0 - 0 = 0
1 - 1 = 0
1 - 0 = 1
0 - 1 = 1 => Se pasa una unidad al sustraendo

Cuando en una columna la cifra del minuendo es menor que la del sustraendo, es preciso pedir una unidad a la columna inmediata superior, con lo que se aumenta en dos unidades el valor del minuendo en la que estamos trabajando (o lo que es lo mismo sumamos 10₂) . Al restar en la columna superior hay que tener en cuenta la unidad del minuendo que se ha pasado a la columna inferior y descontarla de aquella. Pero mejor, veamos un ejemplo:

# Queremos restar 111 a 11101.

# La primera resta es sencilla, 1 - 1 = 0
  1110(1)
- 0011(1)
---------
      (0)

# Ahora al restar debemos llevar una decena al minuendo, quedando 10 - 1.
  111(10)1
- 001(01)1
---------- 
      (1)0

# Llevamos una unidad al sustraendo, al ser mayor que el minuendo, añadimos una decena, pasando de 1 - 10 a 11 - 10.
  11(11)01
- 00(10)11
----------
     (1)10
   
# En esta añadimos una unidad al sustraendo, quedando 1 - 1.
  1(1)101
- 0(1)111
---------
   (0)110

# Finalmente, aquí no hay acarreos, así que tenemos 1 - 0.
 (1)1101
-(0)0111
--------
 (1)0110


# Con esto tenemos que 11101 - 111 = 10110

Multiplicación binaria

Las reglas de multiplicar en binario serían las siguientes:

0 × 0 = 0
0 × 1 = 0
1 × 0 = 0
1 × 1 = 1

La multiplicación binaria sigue el mismo sistema que la decimal. Sólo debemos recordar que la suma final de los productor parciales obtenidos al multiplicar el multiplicando por cada una de las cifras del multiplicador, debe hacerse en binario, como es obvio. Como siempre, será mejor ver un ejemplo:

     110101
     × 1101
     ------
 ₁₁₁₁₁₁₁
     110101
   110101
+ 110101
  ---------
 1010110001

Como se puede observar, sólo hay dos casos, o repetir el multiplicando cuando el valor a usar del multiplicador es 1 o tener el valor 0, en caso de que ese sea el valor a usar del multiplicador.

División binaria

La división binaria debe hacerse de idéntica manera a como se hace la división decimal con la salvedad de que la diferencia entre la parte correspondiente del dividendo y el producto obtenido al multiplicar el divisor por la cifra correspondiente del cociente, debe hacerse e binario. Veamos un ejemplo:

100010 |_110_
-110     101
----
 101
  1010
  -110
  ----
  0100

Como se ha visto, en el caso anterior 100010₂ : 110₂ = 101₂ con resto 100₂. Podemos verificar si la operación ha sido correcta multiplicando divisor por cociente y sumando el resto:

   110 (Divisor)
 × 101 (Cociente)
 -----
   110
 110
 -----
 11110
 + 100 (Resto)
------
100010
Comparte este artículo con quien quieras
Hablemos de acoplamiento y cohesión. Parte 2. Cohesión