Cómo representar un número con signo usando el complemento de 2

Desea representar el número (decimal) -150 en forma de complemento a dos. El número más negativo que se puede representar en forma de complemento a dos de 8 bits es -127. Por lo tanto, necesitará al menos nueve bits. Si está hablando de la forma del complemento de dos, es bastante seguro ya que se usará en algún tipo de aritmética, por lo que sugeriré usar una palabra estándar de 16 bits, que probablemente sea del tamaño de cualquier otra operando con el que se utilizará.

Entonces, el valor 150 en la base diez es 96 en la base 16 (de una tabla hexadecimal-ASCII que está bordada en mi pijama). Hex a binario es bastante simple:

0 0 9 6
0000 0000 1001 1100

Para obtener el negativo, usando la aritmética del complemento a dos, invierta cada bit y agregue 1.

invertir: 0000000010101100 -> 1111111101100011
agregar 1 1
—————–
1111111101101010
FF 6 A

Este fue el camino más largo y difícil. Puede verificar su trabajo con un programa Perl de una línea:

perl -e ‘printf (“% b”, -150);’

Primero encuentre el complemento de 1 del número binario correspondiente y luego agregue 1 para obtener el complemento de 2.

Por ej. Para representar -5

La representación binaria de 5 en 8 bits es 00000101

El complemento de 1 se obtiene tomando el complemento de cada bit.

es decir, 11111010

ahora para encontrar el complemento de 2

11111010 + 00000001 = 11111011 es la representación del complemento a 2 de -5.

Querías representar 150 en el complemento de 2. 150 es mayor que 128. Después de 128, la siguiente potencia más alta de 2 es 256. Por lo tanto, necesita un rango de bits de (256 – 1) a (-256). Es decir, (2 ^ 8 – 1) a (- [2 ^ 8]). Por lo tanto, necesita al menos 9 bits para representar -150 en el cumplido de 2. El error que cometió es representar -150 en 8 bits. Por lo tanto, obtuvo la respuesta incorrecta, aunque otros pasos son correctos.
150 en binario = {10010110}
Para representar 150 en el complemento de 2, se requieren 9 bits (bit de signo aparte de los 8 bits para 150).
Por lo tanto, 150 en decimal es igual a {010010110} en binario.
Cuando tomamos el complemento de 1 de la secuencia de bits binarios anterior, obtenemos {101101001 |.
Si agregamos 1 a la secuencia de bits anterior, obtenemos {101101010}.