¿Cómo se pueden representar los números negativos en 0 y 1 binarios para que la computadora pueda leer con precisión?

¿Cómo se representan los números negativos en binario?

En complemento a 2.

Ignora el binario por un minuto e imagina un videojuego con un puntaje que solo puede llegar a 999. Tienes 997 puntos y obtienes uno más. Estás en 998. Uno más, estás en 999. Uno más, estás en 0.

Si puedes imaginar ese sistema de puntuación, puedes imaginar que podríamos pensar en 999 como -1, porque si obtienes uno más tendrás 0. Y podemos pensar en 998 como -2, y 997 como -3, etc. .

Imagine cómo se vería un sistema de números como ese. Podríamos decir que todo desde 500 en adelante es “negativo”. Entonces 593 se llamaría -407. Ves cómo ir de uno a otro, ¿verdad? Simplemente resta de 1000. Otra forma de verlo es que restamos de 999 y sumamos 1. (Sí, son lo mismo. Sé que lo sabes).

Esto es muy parecido a cómo se expresan los números negativos en binario para los tipos enteros.

El primer bit es el bit de signo. Si es 0, el número es positivo. Si es 1, el número es negativo. Para obtener un número negativo, resta lo que desea de todos los 1 y suma 1 (al igual que hicimos con los 9 para el sistema de números basado en 1000).

Entonces -1 tiene todos los bits. Si agrega 1 a esto, obtendrá 0. La computadora no tiene que hacer caso especial a las matemáticas aquí: agrega 1 a 11111111 …, y sale 0. Excelente. O agrega 10 (dos) a 111111… .110 (menos dos) para obtener 0.

Entonces, para obtener -17, tomaría 17 en binario (16 + no 8’s + no 4’s + no 2’s + 1 => 10001 ). Resta eso de todos los 1, y obtenemos 11111 … 11 01110 . Suma 1 y obtenemos 11111 … 11 01111 . Puede ver que si le agregamos 16 (10000), obtendremos todos los 1. Y ves que si agregamos 1 más, eso es 0.

Los números negativos en binario se llaman números con signo.

En resumen, cuando el primer dígito binario es un 1, es un número negativo, de lo contrario, es cero o positivo.

Ahora, aquí se explica cómo calcular un número negativo en binario. Tomemos una variable de 8 bits, tomemos 65:

0010001

Para encontrar – 65, primero invierte todos los valores de los bits:

1101110

Entonces haces más uno:

1101111

Aquí tienes -65 en binario.

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.

Se almacenan como complemento de dos (complemento de dos)

Digamos que tienes un número -5. Y tienes un registro de 8 bits. La representación de 5 es: [matemáticas] 00000101 [/ matemáticas]
El complemento de uno se obtiene invirtiendo los bits: [matemática] 11111010 [/ matemática]

El complemento de dos se obtiene sumando 1 al complemento de uno: [matemáticas] 11111011 [/ matemáticas]

Como puede ver, los números negativos siempre tendrán 1 como el bit más significativo.

El método más simple para representar números binarios negativos se llama Magnitud con signo: utiliza el dígito más a la izquierda como una indicación de signo y trata los bits restantes como si representaran un entero sin signo. La convención es que si el dígito más a la izquierda (también llamado el dígito más significativo o el bit más significativo) es 0, el número es positivo, si es 1, el número es negativo. Entonces:

00001010 = decimal 10

10001010 = decimal -10

Es por eso que el rango de números positivos que puede almacenar en enteros sin signo es mayor que los números con signo. Por ejemplo, la mayoría de las computadoras usan una arquitectura de 32 bits en estos días, por lo que los enteros también tendrán 32 bits en C.

Esto significa que un INT sin signo puede llegar hasta 4.294.967.296 (que es 2 ^ 32 – 1). Debe restar uno porque el resultado de 2 ^ 32 comienza desde 1, mientras que la primera representación binaria es 0.

Ahora, si el INT está firmado, no podrá usar el bit más a la izquierda. Esto significa que su rango positivo aumentará a 2,147,483,647 (que es 2 ^ 31 – 1). Sin embargo, también tiene los valores negativos, que van hasta -2,147,483,647.

El principal problema con este sistema es que no admite aritmética binaria (que es lo que la computadora haría naturalmente). Es decir, si agrega 10 y -10 binarios, no obtendrá 0 como resultado.

00001010 (10 decimales)

+10001010 (decimal -10)

————-

10010100 (decimal -20)

Esto no tiene mucho sentido, y es por eso que a las personas se les ocurrieron representaciones más adecuadas para una computadora. No obstante, hubo algunas computadoras muy antiguas que utilizaron este sistema para representar números negativos.

Gracias por leer …