Hay al menos cuatro sistemas diferentes para representar un número negativo en binario.
Tres de estos comienzan con la representación binaria del valor absoluto (sin signo) del número, luego cambian varios bits para indicar que es negativo. En los tres casos, el primer bit se cambia de cero a uno, de modo que todos los números negativos comienzan con un bit.
Comience con una representación binaria del valor absoluto del número (sin signo).
Esto generalmente se ilustra como una cadena de bits que van de izquierda a derecha, en orden de magnitud decreciente: el bit más a la derecha está en la “columna de unos”, el siguiente en la “columna de dos”, luego la “columna de cuatro”, y así sucesivamente, con un cero adicional en la posición del bit más a la izquierda establecido en cero para representar el signo “más”. (En los siguientes ejemplos, un espacio en blanco separa los dos nibbles de cuatro bits, pero por lo demás es insignificante, como lo es el sufijo B para indicar Binario).
- 0000 0011 B // representa tres. (El 1 bit y el 2 bit están activados; el resto está desactivado).
- 0001 0001 B // representa diecisiete. (1 y 16 bits son solo).
- 0111 0111 B // representa +119 decimal (o 0x77 en hexadecimal).
- 0111 1111 B // representa +127 (decimal), el mayor valor positivo en 7 bits.
A continuación se muestran los nombres y descripciones de cada uno de estos tres esquemas de representación para representar un número negativo (suponiendo ocho bits para los ejemplos).
MAGNITUD DE SIGNO : Cambie (“cumplido”) solo el primer bit de cero (“apagado”) a uno (“encendido”), pero deje todos los demás bits iguales que para el valor positivo.
- 1000 0011 // es negativo tres (-3)
- 1001 0001 // es diecisiete negativo (-17)
- 1111 0111 // es negativo 119 (-119)
- 1111 1111 // es negativo 127 (-127), el valor más negativo posible.
UNO COMPLEMENTO : Complementa TODOS los ocho bits (encendido a apagado O apagado a encendido).
- 1111 1100 // es negativo tres (-3)
- 1110 1110 // es negativo diecisiete (-17)
- 1000 1000 // es negativo 119 (-119)
- 1000 0000 // es negativo 127 (-127); Este es el valor más negativo.
entonces el rango de valores posibles es simétrico.
COMPLEMENTO DOS : Una forma de obtener una representación de dos complementos es complementar TODOS los ocho bits (es decir, un complemento) y luego agregar uno.
(El código de operación PDP-8 para esto es “CIA” – Acumulador de Complemento e Incremento).
- 1111 1101 // es negativo tres (-3)
- 1110 1111 // es negativo diecisiete (-17)
- 10001001 // es negativo 119 (-119)
- 1000 0001 // es negativo 127 (-127), pero NO es el valor más negativo.
- 1000 0000 // es negativo 128 (-128); este es el valor más negativo,
entonces el rango de valores posibles es asimétrico !
NOTA: Los dos primeros esquemas permiten DOS representaciones diferentes para cero:
- 0000 0000 O 1000 0000 // Ambos representan cero en magnitud de signo.
- 0000 0000 OR 1111 1111 // Ambos representan cero en complementos de uno.
Otro esquema para representar un rango de números enteros se llama “tamaño fijo” (o “rango fijo”). Por ejemplo, la temperatura más baja posible es cero absoluto, por lo que comenzaremos con -273 grados centígrados y asignaremos una representación de doce bits a cada paso de temperatura de un grado.
- 0000 0000 0000 // representa -273 C (cero absoluto)
- 0000 0000 0001 // representa -272 C (o 1 grado en la escala Kelvin).
- 0000 0000 0010 // representa -271 C
- . . .
- 0000 1110 0111 // representa -38 C (el punto de congelación del mercurio, -38 F)
- 0001 0001 0001 // representa 0 C (el punto de congelación del agua, 0 F)
- 0000 0010 0111 // representa 37 C (temperatura del cuerpo humano, 98.6 F)
- 0001 0111 0101 // representa 100 C (el punto de congelación del agua, 212 F)
- . . .
- 1111 1110 // representa +3821 C
- 1111 1111 1111 // representa +3822 C (punto de ebullición aproximado del carbono).
Esta es la temperatura más alta que podemos representar, usando solo 12 bits .
Se puede usar un método de rango fijo para cualquier secuencia de valores, como frecuencias portadoras asignables en la banda de transmisión de FM estadounidense (con una separación de 200 MHz entre cada una). Como solo hay 101 frecuencias (también conocidas como canales 200 a 300), solo se necesitan seis bits.
- 000000 // representa 87.9 MHz, la frecuencia de FM asignable más baja.
- 000001 // representa 88.1 MHz
- 000010 // representa 88.3 MHz
- . . .
- 110011 // representa 107.7 MHz
- 110100 // representa 107.9 MHz (también conocido como canal 300)
Ahora, apliquemos este enfoque al uso de ocho bits para representar un rango de enteros, comenzando con el número negativo más bajo y asignándolos en orden ascendente.
Con ocho bits, hay 256 valores posibles sin signo, de 0 a 255.
Para representar un rango de valores desde -128 hasta +127, simplemente asígnelos en orden:
- 0000 0000 // representa -128, el número más bajo en el rango.
- 0000 0001 // representa -127
- 0000 0010 // representa -126
- 0000 0011 // representa -125
- . . .
- 01111 11111 // representa -1
- 1000 0000 // representa 0
- 1000 0001 // representa +1
- . . .
- 1111 1110 // representa +126
- 1111 1111 // representa +127, el número más alto en el rango.
Tenga en cuenta que los siete bits inferiores son exactamente los mismos que para el complemento a dos (¡pero el bit de signo se invierte!) Sin embargo, para un rango diferente (como -1000 a +1000), los valores serían completamente diferentes.