En matemáticas, los números negativos en cualquier base se representan del modo habitual, precediéndolos con un signo «−». Sin embargo, en una computadora hay varias formas de representar el signo de un número. Este artículo trata cuatro métodos de extender el sistema binario para representar números con signo: signo y magnitud, complemento a uno, complemento a dos y exceso K, donde normalmente K equivale a bn-1 - 1.
Para la mayoría de usos, las computadoras modernas utilizan típicamente la representación en complemento a dos, aunque pueden usarse otras en algunas circunstancias.
En las secciones siguientes nos referiremos exclusivamente al caso de números signados en binario (y contrastaremos con el decimal con fines didácticos). Esto no significa que lo mostrado aquí se pueda llevar en forma análoga a otras bases (hexadecimal, u octal, por ejemplo). El valor absoluto de un número es la distancia que lo separa del cero en la recta numérica; es el propio número tras prescindir de su signo. El valor absoluto se escribe entre barras: | |. Valor absoluto de 3:|3| =3. El valor absoluto de -3: |-3| =3. Los números menores que cero son por supuesto los números negativos.
El número que tiene como valor absoluto 125 y es menor que cero es -125 porque el valor absoluto solo toma en cuenta la distancia, no la dirección, razón por la cual este solo puede ser positivo o cero. |+ Para n = 8 (8 bits) en Signo y Magnitud
Un primer enfoque al problema de representar un número signado de n-bits consiste en asignar:
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). Algunas de las primeras computadoras binarias (la IBM 7090) utilizaron esta representación, quizás por su relación obvia con la práctica habitual.
El formato Signo y Magnitud es además el habitual para la representación del significando en números en punto flotante.
Sea una representación en formato de Signo y Magnitud que nos permite codificar un número entero en binario con 8 bits (un byte). 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 Desventajas, más abajo), 28 = 256 números. Entonces, utilizando un bit para indicar el signo y siete bits para la magnitud, se podrán representar: 127 números positivos (bit de signo en 0), 127 números negativos (bit de signo en 1) y dos ceros (una representación negativa y otra positiva) ya que este sistema permite elegir el signo y la magnitud de forma independiente, por lo que hay un patrón de bits correspondiente a +0 y un patrón de bits correspondiente a -0.
Supongamos ahora, que tenemos que representar el número -9710 (decimal). Procedemos a:
Para el caso inverso, dado un número binario en Signo y Magnitud, por ejemplo, 101101012, procedemos a:
Siguiendo con el ejemplo de n = 8 (8 bits).
Otro enfoque sería representar números negativos usando el complemento a la base menos uno. En el caso de los números binarios, sería el complemento a uno y la forma del complemento a uno de un número binario es un NOT bit a bit aplicado al número, es decir, la inversión de unos por ceros y ceros por unos. De esta forma, en la representación por Complemento a uno de un número signado de n-bits asignamos:
Observar así que la representación en Complemento a uno de un número negativo se puede obtener de la representación en Signo y Magnitud por una mera inversión de unos por ceros y ceros por unos del significando.
Este sistema numérico de representación era común en computadoras más antiguas; el PDP-1 y la serie de UNIVAC 1100/2200, entre muchas otras, utilizaron la aritmética en complemento a uno.
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 este 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 -9710. Procedemos a:
Para el caso inverso, dado un número binario en Complemento a uno, por ejemplo, 101101012, procedemos a:
Los protocolos de Internet IPv4, ICMP, UDP y TCP usan todos el mismo algoritmo de suma de verificación de 16 bits en complemento a uno. Aunque la mayoría 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 representación de todos ceros indica que la suma de verificación opcional ha sido omitida. La otra representación, todos unos, indica un valor 0 en la suma de verificación (las sumas de verificación son obligatorias para IPv4, TCP e ICMP; fueron omitidas en IPv6).
Otro enfoque sería representar números negativos usando el complemento a la base. En el caso de los números binarios, sería el complemento a dos y la forma de obtener el complemento a dos de un número binario es mediante la obtención del complemento a uno y sumarle uno, o bien:
De esta forma, en la representación por Complemento a dos de un número signado de n-bits asignamos:
Observar así que la representación en Complemento a dos de un número negativo se puede obtener de la representación en Signo y Magnitud por una mera inversión de unos por ceros y ceros por unos del significando, y sumarle uno al valor obtenido.
Sea una representación 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 representación 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 números. Los cuales, según este 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).
Para el caso inverso, dado un número binario en Complemento a dos, por ejemplo, 101101012, procedemos a:
ejemplos 1.Convertir los siguientes números decimales en octal y hexadecimal. https://i.ibb.co/vqX14jP/Imagen1.png 2.Convertir los siguientes números binarios en decimal https://i.ibb.co/RSqyR2p/Imagen2.png 3.Convertir los siguientes números hexadecimales a decimal y binario https://i.ibb.co/YZ94XWQ/Imagen4.png
Un último enfoque al problema de representar un número signado es el exceso a K, donde a cada número se le suma el mismo valor, y está en exceso por dicho valor. Este formato es habitual para la representación del exponente en números en punto flotante.
K no tiene un valor estandarizado, pero suele tomarse como 2n-1 (que coincide con el complemento a dos con el bit más significativo negado), o como 2n-1-1 (como en el caso de la norma IEEE-754).
Sea una representación en formato de Exceso que nos permite codificar en binario en punto fijo con 8 bits (un byte). Luego, los números 8 bits serán representados en Exceso a 28-1 = 12810. Con 8 bits, podemos representar, 28 = 256 números.
Para el caso inverso, dado un número binario en Exceso 12810, por ejemplo, 101101012, procedemos a:
La tabla siguiente compara la representación de los enteros entre 8 y -8 (incluidos) usando 4 bits.