Aritmética binaria

Aquí la información necesaria para poder diseñar circuitos digitales combinacionales capaces de sumar y restar.

Representación numérica

a) Magnitud y signo

b) Complemento a uno

c) Complemento a dos

MAGNITUD Y SIGNO

Un primer enfoque al problema de representar un número signado de n-bits consiste en asignar:

  1. Un bit para representar el signo. Ese bit a menudo es el bit más significativo o MSB y, por convención: un ‘0’ denota un número positivo, y un ‘1’ denota un número negativo.
  2. Los (n-1)-bits restantes para representar el significando que es la magnitud del número en valor absoluto.

Y se conoce como Signo y Magnitud.

Este enfoque es directamente comparable a la forma habitual de mostrar el signo (colocando «+» o «-» al lado de la magnitud del número).

El formato Signo y Magnitud es además el habitual para la representación del significando en números en punto flotante.

Desventajas de la representación en Signo y Magnitud:

Cogiendo el ejemplo de n = 8 (8 bits).

  • Es más complejo operar aritméticamente. Para realizar una suma, por ejemplo, primero hay que determinar si los dos números tienen el mismo signo, y en caso de que sea así, realizar la suma de la parte significativa, pero en caso contrario, restar el mayor del menor y asignar el signo del mayor.
  • Posee doble representación del 0:  00000000 (+0) y 10000000 (-0).

Ventajas de la representación en Signo y Magnitud

Siguiendo con el ejemplo de n = 8 (8 bits).

  • Posee un rango simétrico: los números van del +127 = 01111111, pasando por el +0 = 00000000 y el -0 = 10000000, hasta el -127 = 11111111. Y en forma general, para n-bits, el rango (en decimal) para Signo y Magnitud es (-2n-1+1; 2n-1-1), o bien ± 2n-1-1.

COMPLEMENTO A 1:

Sea una representación en formato de Complemento a uno que nos permite codificar en binario en punto fijo con 8 bits (un byte). Al igual que con la representación en Signo y Magnitud, esto nos otorga 1 bit para el signo y 7 bits para la magnitud. Con 8 bits, podemos representar, en teoría al menos (véase nuevamente Desventajas, más abajo), 28 = 256 números. Los cuales, según éste formato, van a estar repartidos entre 128 números positivos (bit de signo en 0) y 128 números negativos (bit de signo en 1).

Supongamos ahora, que tenemos que representar el número -97. Procedemos a:

  1. Tomar nota del signo del número -97, que siendo negativo, llevará como bit de signo un 1;
  2. Como el signo es negativo, el número a continuación del bit de signo, deberá expresarse en complemento a uno. Al realizar la conversión: el valor absoluto de -97 es |-97| = 97. Que en binario es: 1100001, y el complemento a uno de 1100001 es C1(1100001) = 0011110;
  3. Colocar todo junto, el número -97 en binario con formato de Complemento a uno es: 100111102. Donde el 1 en el bit más significativo indica un número negativo, y 0011110 es el significando en complemento a uno del valor absoluto del número.

Para el caso inverso, dado un número binario en Complemento a uno, por ejemplo, 10110101, procedemos a:

  1. Analizar el bit más significativo, que siendo un 1 indica que el número es negativo;
  2. Convertir el significando a la base deseada, por ejemplo, en decimal, tomando en cuenta que: el valor obtenido está en valor absoluto, que la magnitud real estará dada por el bit de signo obtenido antes, y que en caso de ser bit de signo negativo (como es el caso) se deberá obtener el complemento a uno: C1(0110101) = 1001010 = |74|. Siendo que el bit de signo es 1, el número real es -74. Si el bit de signo fuese 0, el número hubiese sido 0110101 = +53 (‘sin complementar a uno).

Desventajas de la representación en Complemento a uno

Siguiendo con el ejemplo de n = 8 (8 bits).

  • Posee doble presentación del cero. Al representar en Complemento a uno, aparece nuevamente el cero signado: 00000000 (+0) y 11111111 (-0).

Ventajas de la representación en Complemento a uno

Siguiendo con el ejemplo de n = 8 (8 bits).

  • Posee un rango simétrico: los números van del +127 = 011111112, pasando por el +0 = 00000000 y el -0 = 11111111, hasta el -127 = 10000000. Y en forma general, para n-bits, el rango (en decimal) para Complemento a uno es (-(2n-1)-1; 2n-1-1), o bien ± 2n-1-1.
  • Permite operar aritméticamente. NOTA: al operar se debe sumar el acarreo obtenido al final de la adición/resta realizadas, en caso de haberlo obtenido, para conseguir el resultado correcto. Por ejemplo: 00010101 + 10011110 = 10110011 (+21 + -97 = -76) puesto que el acarreo es cero; pero, 00000010 + 11111110 =100000000 (+2 + -1 = -0 ≠ +1), que corregimos mediante 00000010 + 11111110 = 00000000 + 1 = 00000001, que es el resultado correcto.

COMPLEMENTO A DOS:

El complemento a dos de un número N que, expresado en el sistema binario está compuesto por n dígitos, se define como:

C_2^N=2^n - N.

El total de números positivos será 2^{n-1}-1 y el de negativos 2^{n-1}, siendo n el número máximo de bits.

Veamos un ejemplo: tomemos el número N=45 que, cuando se expresa en binario es N=101101, con 6 dígitos, y calculemos su complemento a dos:

Cabe señalar que en este ejemplo se ha limitado el número de bits a 6, por lo que no sería posible distinguir entre el -45 y el 19 (el 19 en binario es 10011). En realidad, un número en complemento a dos se expresa con una cantidad arbitraria de unos a la izquierda, de la misma manera que un número binario positivo se expresa con una cantidad arbitraria de ceros. Así, el -45, expresado en complemento a dos usando 8 bits sería 11010011, mientras que el 19 sería 00010011; y expresados en 16 bits serían 1111111111010011 y 0000000000010011 respectivamente. Se presenta la tabla de verdad del complemento a 2 para cuatro dígitos.

complemento a 2

El cálculo del complemento a dos es muy sencillo y muy fácil de realizar mediante puertas lógicas, donde reside su utilidad.

Para comenzar los números positivos se quedarán igual en su representación binaria. Los números negativos deberemos invertir el valor de cada una de sus cifras, es decir realizar el complemento a uno, y sumarle 1 al número obtenido.

Otra forma de calcular el complemento a 2 es: Se dejan igual los bits hasta el primer ‘1’ (incluido) y los demás se niegan, empezando por el de menor pero, es decir, de derecha a izquierda, así por ejemplo si tenemos el número 01010 (10) su C2 sería: 10110 (-10).

 

SUMADORES

Semisumador:

El semisumador (half adder) es un circuito que suma dos bits de entrada A y
B y devuelve un bit de resultado S y un bit de acarreo cout.

sumador elemental

Sumador elemental completo:

El sumador completo (full adder) es un circuito que suma dos bits de entrada A y B más un acarreo de entrada cin y devuelve un bit de resultado s y un bit de acarreo cout.

sumador completo

Restadores binario:

Restar en C2: al minuendo se suma el complemento a 2 del sustraendo: Para complementar el sustraendo, invertimos todos sus bits e introducimos un 1 en el acarreo de entrada del sumador menos significativo. Por este procedimiento también había que invertir el acarreo de salida. Esto funciona tanto para binario puro como para complemento a 2 (en complemento a 2 el acarreo se desprecia, y habría que detectar el posible desbordamiento de otro modo).

restador

Compartir:
(1 votes, average: 5,00 out of 5)
Cargando...