Você está na página 1de 6

Complementos:

En matemticas, los nmeros negativos en cualquier base se representan del modo


habitual, precedindolos con un signo . Sin embargo, en una computadora, hay varias
formas de representar el signo de un nmero. Este artculo trata cuatro mtodos de
extender el sistema binario para representar nmeros con signo: signo y
magnitud, complemento a uno, complemento a dos y exceso K, donde normalmente K
equivale a bn-1.
Para la mayora de usos, las computadoras modernas utilizan tpicamente la
representacin en complemento a dos, aunque pueden usarse otras en algunas
circunstancias.
Complementos a la base uno.
Otro enfoque sera representar nmeros negativos usando el complemento a la base
menos uno. En el caso de los nmeros binarios, sera el complemento a uno y la forma
del complemento a uno de un nmero binario es un NOT bit a bit aplicado al nmero, es
decir, la inversin de unos por ceros y ceros por unos. De esta forma, en la representacin
por Complemento a uno de un nmero signado de n-bits asignamos:
1. un bit para representar el signo. Ese bit a menudo es el bit ms significativo y, por
convencin: un 0 denota un nmero positivo, y un 1 denota un nmero negativo;
2. los (n-1)-bits restantes para representar el significando que es la magnitud del
nmero en valor absoluto para el caso de nmeros positivos, o bien, en el
complemento a uno del valor absoluto del nmero, en caso de ser negativo.
Observar as que la representacin en Complemento a uno de un nmero negativo se
puede obtener de la representacin en Signo y Magnitud por una mera inversin de unos
por ceros y ceros por unos del significando.
Este sistema numrico de representacin era comn en computadoras ms antiguas;
el PDP-1 y la serie de UNIVAC 1100/2200, entre muchas otras, utilizaron la aritmtica en
complemento a uno.

Ejemplo de complemento a uno.


Sea una representacin 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 representacin en Signo y
Magnitud, esto nos otorga 1 bit para el signo y 7 bits para la magnitud. Con 8 bits,
podemos representar, en teora al menos (vase nuevamente Desventajas, ms abajo),
28 = 256 nmeros. Los cuales, segn ste formato, van a estar repartidos entre 128
nmeros positivos (bit de signo en 0) y 128 nmeros negativos (bit de signo en 1).
Supongamos ahora, que tenemos que representar el nmero -9710. Procedemos a:
1. Tomar nota del signo del nmero -9710, que siendo negativo, llevar como bit de
signo un 1;
2. Como el signo es negativo, el nmero a continuacin del bit de signo, deber
expresarse en complemento a uno. Al realizar la conversin: el valor absoluto de
-9710 es |-9710| = 9710. Que en binario es: 11000012, y el complemento a uno de
11000012 es C1(1100001) = 00111102;
3. Colocar todo junto, el nmero -9710 en binario con formato de Complemento a uno
es: 100111102. Donde el 1 en el bit ms significativo indica un nmero negativo, y
00111102 es el significando en complemento a uno del valor absoluto del nmero.
Para el caso inverso, dado un nmero binario en Complemento a uno, por ejemplo,
101101012, procedemos a:
1. Analizar el bit ms significativo, que siendo un 1 indica que el nmero 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) =
10010102 = |7410|. Siendo que el bit de signo es 1, el nmero real es -7410. Si el bit
de signo fuese 0, el nmero hubiese sido 01101012 = +5310('sin complementar a
uno).

Desventajas de la representacin en Complemento a uno.


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

Posee doble representacin del cero. Al representar en Complemento a uno,


aparece nuevamente el cero signado: 000000002 (+010) y 111111112 (-010).

Ventajas de la representacin en Complemento a uno.


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

Posee un rango simtrico: los nmeros van del +12710 = 011111112, pasando por el
+010 = 000000002 y el -010 = 111111112, hasta el -12710 = 100000002. Y en forma
general, para n-bits, el rango (en decimal) para Complemento a uno es (-(2n-1-1); 2n-11), o bien 2n-1-1.

Permite operar aritmticamente. NOTA: al operar se debe sumar


el acarreo obtenido al final de la adicin/resta realizadas (conocido como end-around
carry), en caso de haberlo obtenido, para conseguir el resultado correcto. Por
ejemplo: 000101012 + 100111102 = 101100112 (+2110 + -9710 = -7610) puesto que el
end-around carry es cero; pero, 000000102 + 111111102 = 1000000002 (+210 + -110 =
-010 +110), que corregimos mediante 000000102 + 111111102 = 000000002 +12 =
000000012, que es el resultado correcto.

Los protocolos de Internet IPv4, ICMP, UDP y TCP usan todos el mismo algoritmo
de suma de verificacin de 16 bits en complemento a uno. Aunque la mayora de la
computadoras carecen del hardware para manejar acarreo del ltimo bit (end-around
carry), la complejidad adicional es aceptada ya que es igualmente sensible a errores en
todas las posiciones de bits. En UDP, una representacin de todos ceros indica que la
suma de verificacin opcional ha sido omitida. La otra representacin, todos unos, indica
un valor 0 en la suma de verificacin (las sumas de verificacin son obligatorias para IPv4,
TCP e ICMP; fueron omitidas en IPv6).
Complemento a Dos (o a la base).
Otro enfoque sera representar nmeros negativos usando el complemento a la base. En
el caso de los nmeros binarios, sera el complemento a dos y la forma de obtener el

complemento a dos de un nmero binario es mediante la obtencin del complemento a


uno y sumarle uno, o bien:
Ejemplo 1 Ejemplo 2
1. Empezando desde la derecha encontramos el primer '1'

0101001

0101100

2. Hacemos un NOT a todos los bits que quedan por la izquierda

1010111

1010100

De esta forma, en la representacin por Complemento a dos de un nmero signado de nbits asignamos:
1. un bit para representar el signo. Ese bit a menudo es el bit ms significativo y, por
convencin: un 0 denota un nmero positivo, y un 1 denota un nmero negativo;
2. los (n-1)-bits restantes para representar el significando que es la magnitud del
nmero en valor absoluto para el caso de nmeros positivos, o bien, en el
complemento a dos del valor absoluto del nmero, en caso de ser negativo.
Observar as que la representacin en Complemento a dos de un nmero negativo se
puede obtener de la representacin en Signo y Magnitud por una mera inversin de unos
por ceros y ceros por unos del significando, y sumarle uno al valor obtenido.
Ejemplo de complemento a dos.
Sea una representacin en formato de Complemento a dos que nos permite codificar en
binario en punto fijo con 8 bits (un byte). Al igual que con la representacin en Signo y
Magnitud, y Complemento a uno, esto nos otorga 1 bit para el signo y 7 bits para la
magnitud. Con 8 bits, podemos representar, 28 = 256 nmeros. Los cuales, segn ste
formato, van a estar repartidos entre 128 nmeros positivos (bit de signo en 0) y 128
nmeros negativos (bit de signo en 1).
Supongamos ahora, que tenemos que representar el nmero -9710. Procedemos a:
1. Tomar nota del signo del nmero -9710, que siendo negativo, llevar como bit de
signo un 1;

2. Como el signo es negativo, el nmero a continuacin del bit de signo, deber


expresarse en complemento a dos. Al realizar la conversin: el valor absoluto de
-9710 es |-9710| = 9710. Que en binario es: 11000012, y el complemento a uno de
11000012 es C1(1100001) = 00111102, le sumamos uno para obtener el
complemento a dos: 00111102 + 00000012 = 00111112;

Colocar todo junto, el nmero -9710 en binario con formato de Complemento a dos
es: 100111112. Donde el 1 en el bit ms significativo indica un nmero negativo, y
00111112 es el significando en complemento a dos del valor absoluto del nmero.

Para el caso inverso, dado un nmero binario en Complemento a dos, por ejemplo,
101101012, procedemos a:
1. Analizar el bit ms significativo, que siendo un 1 indica que el nmero 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 dos: C2(0110101) =
C1(0110101) + 00000012, luego C1(0110101) = 10010102, y al sumarle 1,
10010112 = |7510|. Siendo que el bit de signo es 1, el nmero real es -7510. Si el bit
de signo fuese 0, el nmero hubiese sido 01101012 = +5310 (sin complementar a
dos).
Desventajas de la representacin en Complemento a dos.
Siguiendo con el ejemplo de n = 8 (8 bits).

Posee un rango asimtrico: los nmeros van del +12710 011111112, pasando por el
+010, 000000002. Y aqu aparece la primera diferencia, el 111111112, ya no es
-010 como en la representacin anterior, sino que es -110, y al llegar al 100000002 nos
encontramos con que el complemento a dos de 100000002 es 100000002, el mismo
nmero!. Por convencin, se asigna a este nmero particular el valor -12810 (para 8
bits). Luego, en forma general, para n-bits, el rango (en decimal) para Complemento a
dos es (-2n-1; 2n-1-1).

Ventajas de la representacin en complemento a dos.


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

No posee doble representacin del cero.

Permite operar aritmticamente.

Você também pode gostar