Binario

Juan Caramuel Lobkowitz, explicó el principio general de los números en base n, destacando las ventajas de utilizar bases distintas de la 10 para resolver algunos problemas. En 1.670 publica “Mathesis bíceps”, siendo el primer científico en describir el sistema binario; En la página 45 del primer tomo se puede leer el comienzo de la aritmética binaria, un adelanto de unos 30 años a la explicación de Leibniz.

 

Juan Caramuel - Descripción Sistema Binario Pág. 45
Juan Caramuel – Descripción Sistema Binario Pág. 45

Su trabajo lo desarrolló al servicio del rey Carlos I de España en Madrid, Alcalá de Henares y sus múltiples estancias en toda Europa. Define los cologaritmos y un tratado sobre probabilidad que influenció a Pascal para sus teorías probabilísticas.

 

El sistema binario es base 2 y los números que lo representan son el 1 y 0. Se usa fundamentalmente en la computación y comunicaciones electrónicas. En la electrónica digital, un ‘ 1 ‘ significa que existe corriente o está presente la electricidad y un ‘ 0 ‘ significa que no está presente.

 

Los computadores usan distintas longitudes de palabra, cantidad de bits, que representan los dígitos de su base. En función de la evolución tecnológica se han ido utilizando distintas longitudes, 4, 8, 16, 32, 64 e irán aumentando paulatinamente. Un bit es la unidad mínima de memoria de los computadores.

 

Un ejemplo de representación plana binaria con 8 bits para números enteros:

Posición del bit Cálculo del equivalente decimal
7 6 5 4 3 2 1 0
0 0 0 0 0 0 0 0 0 × 2 7 + 0 × 2 6 + 0 × 2 5 + 0 × 2 4 + 0 × 2 3 + 0 × 2 2 + 0 × 2 1 + 0 × 2 0 = 0
0 0 0 0 0 0 0 1 0 × 2 7 + 0 × 2 6 + 0 × 2 5 + 0 × 2 4 + 0 × 2 3 + 0 × 2 2 + 0 × 2 1 + 1 × 2 0 = 1
0 0 0 0 0 0 1 0 0 × 2 7 + 0 × 2 6 + 0 × 2 5 + 0 × 2 4 + 0 × 2 3 + 0 × 2 2 + 1 × 2 1 + 0 × 2 0 = 2
0 0 0 0 0 0 1 1 0 × 2 7 + 0 × 2 6 + 0 × 2 5 + 0 × 2 4 + 0 × 2 3 + 0 × 2 2 + 1 × 2 1 + 1 × 2 0 = 3
0 0 0 0 0 1 0 0 0 × 2 7 + 0 × 2 6 + 0 × 2 5 + 0 × 2 4 + 0 × 2 3 + 1 × 2 2 + 0 × 2 1 + 0 × 2 0 = 4
0 0 0 0 0 1 0 1 0 × 2 7 + 0 × 2 6 + 0 × 2 5 + 0 × 2 4 + 0 × 2 3 + 1 × 2 2 + 0 × 2 1 + 1 × 2 0 = 5
0 0 0 0 0 1 1 0 0 × 2 7 + 0 × 2 6 + 0 × 2 5 + 0 × 2 4 + 0 × 2 3 + 1 × 2 2 + 1 × 2 1 + 0 × 2 0 = 6
0 0 0 0 0 1 1 1 0 × 2 7 + 0 × 2 6 + 0 × 2 5 + 0 × 2 4 + 0 × 2 3 + 1 × 2 2 + 1 × 2 1 + 1 × 2 0 = 7
0 0 0 0 1 0 0 0 0 × 2 7 + 0 × 2 6 + 0 × 2 5 + 0 × 2 4 + 1 × 2 3 + 0 × 2 2 + 0 × 2 1 + 0 × 2 0 = 8
0 0 0 1 0 0 0 0 0 × 2 7 + 0 × 2 6 + 1 × 2 5 + 0 × 2 4 + 0 × 2 3 + 0 × 2 2 + 0 × 2 1 + 0 × 2 0 = 32
0 0 1 0 0 0 0 0 0 × 2 7 + 1 × 2 6 + 0 × 2 5 + 0 × 2 4 + 0 × 2 3 + 0 × 2 2 + 0 × 2 1 + 0 × 2 0 = 64
1 1 1 1 1 1 1 1 1 × 2 7 + 1 × 2 6 + 1 × 2 5 + 1 × 2 4 + 1 × 2 3 + 1 × 2 2 + 1 × 2 1 + 1 × 2 0 = 255

 

 

Existen distintas formas para representar números en código binario:

 

  • Con peso. El valor de cada bit depende de la posición que ocupa, por ejemplo: Binario natural (BCD 8421), BCD 5421, BCD AIKEN 2421, BCD 7421, BCD 6311 y otros. El significado de BCD es (Binary Coded Decimal – Decimal Codificado en Binario), son grupos de 4 bits en el cual cada grupo solo puede representar a un único dígito decimal. Por ejemplo:

El BCD 8421 indica que el 1º bit posee un valor de 8, el segundo de 4, el tercero de 2 y último un valor de 1.
El BCD 6311 indica que el 1º bit posee un valor de 6, el segundo de 3, el tercero de 1 y último un valor de 1.

 

  • Sin peso. El valor de cada bit no posee un valor por posición, por ejemplo: Exceso a 3, Gray, Johnson, Biquinario.

 

Representación decimal según el peso
Con peso Sin peso
Decimal BCD natural Aiken 2421 BCD 5421 Exceso a 3 Gray Johson
0 0000 0000 0000 0011 0000 0000
1 0001 0001 0001 0100 0001 0001
2 0010 0010 0010 0101 0011 0011
3 0011 0011 0011 0110 0010 0111
4 0100 0100 0100 0111 0110 1111
5 0101 1011 1000 1000 0111 11111
6 0110 1100 1001 1001 0101 11110
7 0111 1101 1010 1010 0100 11100
8 1000 1110 1011 1011 11000
.
En función del tipo de número la representación interna es distinta:
.
  • Enteros sin signo. Es la forma más sencilla de representar un número. La palabra, cantidad de bits ( n ), representa la magnitud del número, por tanto la cifra de números a representar está dada desde 0 a 2n . Por ejemplo, con 8 bits se tienen representaciones de números sin signo de 0 a 255, con 16 bits de 0 a 65.535, etc. Aquí aparece un inconveniente importante, no es posible representar números negativos o fraccionarios.
  • Enteros con signo. En ésta representación el primer bit muestra el signo (1 negativo y 0 positivo) y los bits restantes representan la magnitud en valor absoluto. Ahora el rango de números a representar, para 8 bits es de ±127 y para 16 bits de ±32.767. En esta representación el cero aparece de dos formas: +0 ( 0 000 0000) y -0 ( 1 000 0000), esto complica las operaciones y para solucionarlo se utiliza, el complemento a 1 y a 2.
  • Coma flotante. La representación en coma flotante está basada en la notación científica: El punto decimal no se halla en una posición fija dentro de la secuencia de bits, sino que su posición se indica como una potencia de la base. En esta representación el número se descompone en dos partes:
    • La mantisa, son los dígitos del número, si es negativa representa números negativos.
    • El exponente, indica dónde se coloca el punto decimal en relación al inicio de la mantisa, si es negativo representa números negativos.

 

Para representar los números reales el tratamiento es distinto ya que las computadoras aún no pueden almacenar todos esos números de forma exacta, esto es similar a lo que ocurre con los números irracionales (como ?, ?2, etc), o periódicos (1?3, 1?11,…) en el sistema decimal. La forma convencional de almacenar números reales en la memoria de un computador es mediante la coma flotante, método formulado por Leonardo Torres Quevedo a principios del siglo XX.

Leonardo Torres Quevedo
Leonardo Torres Quevedo

 

Los computadores capaces de trabajar en coma flotante no estuvieron listos hasta 1.957, el primero comercial fue el IBM 650. En 1.976 John F. Palmer comienza el desarrollo de una aritmética de coma flotante para los procesadores Intel que es puesta a la venta en 1.980 como coprocesador denominado 8087, su competidor principal Motorola, libera el 68881 en 1.982.

 

Para la representación de éstos números existen sistemas normalizados, a partir de 1.980 se desarrollaron normativas como la IEC/5598 (IEC-Comisión Electrotécnica Internacional) y ISO/IEC/60559:2011, que son aplicadas a las computadoras actuales y en otros sistemas.

 

Para calcular los valores máximos y mínimos de un número N utilizamos la notación exponencial: N = M × BE, donde N es el número M la mantisa, B la base y E el exponente. Los sistemas más utilizados son:

 

  • Simple precisión, para máquinas y sistemas operativos de 32 bits. Con los siguientes valores de precisión:

Nmín = 2-126 ? 10-38

Representación simple precisión

Nmáx = 2128 ( 1-2-24 ) ? 1038

?M = 2-23 ? 10-7

para el redondeo

r = 1/2?M = 2-24 ? 6 × 10-8

 

 

 

  • Doble precisión, para máquinas y sistemas operativos de 64 bits.Con los siguientes valores de precisión:

Nmín = 2-1022 ? 10-308

Representación doble precisión

Nmáx = 21024 ( 1- 2-53 ) ? 10308

?M = 2-52 ? 10-16

para el redondeo

r = 1/2?M = 2-53 ? 10-16

 

 

 

 

  • Cuádruple precisión, para máquinas y sistemas operativos de 128 bits

Nmín = 2-16382 ? 10-4932

Nmáx = 216384 ( 1- 2-113 ) ? 104032

?M = 2-112 ? 2 × 10-34

para el redondeo

r = 1/2?M = 2-53 ? 10-34

 

Debemos tener en cuenta que algunas operaciones pueden parecer incorrectas al no poderse representar de forma precisa, esto es porque se redondea al número más cercano en ese formato, el error aparece incluso antes de que se realice la operación. Para el redondeo r están establecidos 4 casos básicos:

 

  1. El resultado se redondea al número más próximo representable.
  2. El resultado se redondea hacia cero.
  3. Redondeo hacia +?: se redondea por exceso hacia más infinito.
  4. Redondeo hacia ??: se redondea por exceso hacia menos infinito

 

En la actualidad (2.015), las precisiones simple y doble están desarrolladas físicamente en las computadoras y la precisión cuádruple es resuelta mediante programación. Por tanto, se deben de elegir con cuidado el tipo de datos en función de, los datos de entrada, las necesidades, operaciones y resultados.

 

 

Programa en Java para ver el comportamiento de la precisión con coma flotante