Representación de números con signo en computación
Explicación de los métodos usados para codificar enteros negativos en binario: signo y magnitud, complemento a uno, complemento a dos, sesgo (excess) y sus ventajas, limitaciones y ejemplos.
Visión general
En sistemas digitales es necesario representar números enteros negativos usando bits. Una representación con signo asigna, dentro de un conjunto finito de patrones binarios, códigos distintos para valores positivos y negativos. Existen varias técnicas diseñadas para que las operaciones aritméticas y el almacenamiento sean eficientes y coherentes: signo y magnitud, complemento a uno, complemento a dos y representaciones con sesgo (excess). Cada método tiene consecuencias prácticas sobre el rango de valores, la existencia de ceros múltiples y la facilidad para sumar o comparar.
Representaciones comunes
- Signo y magnitud: el bit más significativo (MSB) indica el signo (0 = positivo, 1 = negativo) y el resto de los bits expresa la magnitud en binario sin modificar. Es intuitivo pero crea dos ceros (+0 y −0) y complica las sumas porque el hardware debe tratar el signo por separado.
- Complemento a uno (uno's complement): los números negativos se obtienen invirtiendo cada bit del positivo correspondiente. También genera +0 y −0, y la suma requiere una corrección (suma del acarreo final) para obtener el resultado correcto.
- Complemento a dos (two's complement): es el método dominante en la mayoría de los procesadores modernos. El negativo de un número se obtiene invirtiendo los bits y sumando uno. Tiene un único cero y permite sumar números negativos sin tratamiento especial; el rango para n bits es −2^(n−1) a 2^(n−1)−1.
- Representación sesgada (biased/excess): se usa frecuentemente para exponentes en formatos de coma flotante. Consiste en almacenar un valor offsetado (por ejemplo, excess-127) para que el orden numérico coincida con el orden lexicográfico de los códigos.
Comparaciones y propiedades prácticas
Cada esquema presenta ventajas y limitaciones para operaciones aritméticas, comparación y codificación. El complemento a dos simplifica el hardware de sumadores: la misma lógica suma positivos y negativos sin distinguir el signo, y sólo hay un cero. Signo y magnitud, aunque más claro conceptualmente, requiere lógica adicional para manejar signos en suma y resta. Complemento a uno conserva la simetría entre positivo y negativo pero obliga a tratar el acarreo final cuando se realiza una suma.
Ejemplos con 4 bits
Usando 4 bits se ilustra bien la diferencia entre métodos. En signo y magnitud +3 = 0011 y −3 = 1011; hay +0 = 0000 y −0 = 1000. En complemento a uno +3 = 0011 y −3 = 1100; existe también −0 = 1111. En complemento a dos +3 = 0011 y −3 = 1101; sólo aparece 0000 como cero. El rango de valores con 4 bits en complemento a dos es −8 a +7, mientras que en signo y magnitud la magnitud máxima vale 7 y hay representación redundante del cero.
Historia y uso práctico
En las primeras generaciones de ordenadores se exploraron diversos esquemas por razones de coste y simplicidad de diseño; algunos equipos usaron signo y magnitud o complemento a uno. Con el tiempo el complemento a dos se impuso por su eficiencia en la implementación de sumadores y por evitar ceros dobles. Las representaciones sesgadas se estandarizaron en formatos de coma flotante (IEEE 754) para facilitar comparaciones de exponentes.
Precauciones, detección de desbordamiento y aplicaciones
Al operar con números con signo es importante detectar desbordamientos: en complemento a dos la condición de overflow en suma ocurre cuando se suman operandos con el mismo signo y el resultado tiene signo distinto; también puede detectarse con operaciones sobre los acarreos en la posición del signo. Las elecciones de representación afectan compiladores, protocolos binarios y formatos de archivos; por ejemplo, muchos lenguajes y CPUs modernas usan complemento a dos, mientras que ciertos campos (exponentes en coma flotante, algunos ADC) emplean notación sesgada. Para más detalles técnicos y ejemplos adicionales consulte la documentación.
Datos relevantes
- La fórmula general del rango en complemento a dos para n bits: −2^(n−1) a 2^(n−1)−1.
- Signo y magnitud y complemento a uno introducen redundancia (+0 y −0), lo que puede complicar comparaciones y normalización.
- La adopción moderna favorece complemento a dos por su simplicidad en hardware aritmético.
Signo y magnitud
El signo y la magnitud funcionan cambiando el bit más significativo (MSB - el primer dígito) a un 1 si el número es negativo, y reduciendo el número en uno, por ejemplo:
0000 0010 (2)
se convertirá en...
1000 0010 (-2)
Este método de almacenar números binarios negativos no funciona porque:
- La aritmética binaria no funciona.
- Primero debemos saber qué mecanismo de almacenamiento utiliza el compilador de un determinado lenguaje.
Complemento a 1
El complemento de 1 funciona intercambiando 1s por 0s y los 0s por 1s, por ejemplo:
0000 0010 (2)
se convertirá en...
1111 1101 (-2)
Al igual que el método de signo y magnitud, se define fácilmente como un número negativo porque su bit más significativo es 1
Complemento a 2
El complemento a 2 es una forma más difícil de almacenar los negativos. Hay tres pasos para ello:
- Encuentre el número binario positivo (por ejemplo, 8base 10 = 0000 1000base 2).
- Cambia los 1s por 0s y los 0s por 1s (por ejemplo, 0000 1000base 2 se convierte en 1111 0111base 2).
Esto se conoce como "voltear los bits", o aplicar el NOT lógico a la representación original de base 2.
- Suma 1 (por ejemplo, 1111 0111base 2 + 1base 2 = 1111 1000base 2).
Este método gusta porque:
- Es como el signo y la magnitud; un número negativo comienza con un 1 y un número positivo con un 0.
- La aritmética binaria funcionará.
- Sólo hay un valor para el 0 (0000 0000base 2).
Artículos relacionados
Autor
AlegsaOnline.com Representación de números con signo en computación Leandro Alegsa
URL: https://es.alegsaonline.com/art/90333