wake-up-neo.net

Convertir decimal negativo a binario

He estado tratando de convertir el número -441 a binario, pero realmente no sé cómo puedo lograr esto.

Primero convertí el 441 a binario, que es: 110111001 Luego debo tomar el complemento de este número, que es: 001000110 Y luego debo agregar uno, lo que resultaría en: 001000111

El ejercicio dice que tengo que dar la representación binaria en 10 bits y 16 bits, así que pensé que podía poner un cero antes del número y eso es todo, pero después de muchas búsquedas descubrí que se supone que debo poner un UNO antes del número, ¿por qué es este el caso?

¿Cómo haría para convertir -441 a un número de 16 bits?

Gracias.

7
Maxim

Estás confundido porque olvidaste que debe haber algo que distinga los números positivos de los negativos.

Digamos que desea almacenar números no negativos en 8 bits.

  • 00000000 es 0,
  • 00000001 es 1,
  • 00000010 es 2,
  • 00000011 es 3,
  • 00000100 es 4,
  • ...
  • 11111111 es 255

Así que puedes almacenar números en el rango 0-255 en 8 bits. 255 = 28 - 1. (2 es la base del sistema binario, 8 es el número de bits, 1 se resta porque queremos contar 0 en)

Ahora, digamos que usted también quiere almacenar números negativos. ¿Cómo podemos lograr eso? Podemos dedicar un bit por signo. Si este bit es 0, entonces interpretamos otros 7 bits como un número positivo, de lo contrario como un número negativo. Es mejor usar el bit más significativo para firmar, ya que facilita algunas operaciones.

  • Enfoque trivial: Simplemente lea un número como está:

    • 00000001 == 1 y 10000001 == -1
    • 01000010 == 66 y 11000010 == -66
    • 01111111 == 127 y 11111111 == -127
  • Complemento de unos: Para cualquier número x, la negación de su representación binaria produce una representación binaria de -x. Esto significa que:

    • 00000001 == 1 y 11111110 == -1
    • 01000010 == 66 y 10111101 == -66
    • 01111111 == 127 y 10000000 == -127
  • Complemento de dos: Para cualquier número x, al anular su representación binaria y al agregar 1 se obtiene la representación binaria de -x. Esto significa que:

    • 00000001 == 1 y 11111111 == -1
    • 01000010 == 66 y 10111110 == -66
    • 01111111 == 127 y 1000001 == -127
    • 10000000 == -128

¿Por qué el complemento de dos es el mejor?

  • Porque tiene el rango más amplio: -128 ... 127, mientras que el enfoque trivial y el complemento de unos tienen -127 ... 127
  • El cero está bien definido:
    • En el complemento de dos solo 00000000 es cero
    • En el enfoque trivial, tanto 00000000 como 10000000 son cero
    • En el complemento de unos, tanto 00000000 como 11111111 son cero
  • La suma y la resta son idénticas a las de los números sin signo, por lo que la CPU no necesita instrucciones adicionales para agregar números con signo.

Tenga en cuenta que si dedicamos el bit más significativo para el bit de signo, no podemos convertir el número a binario sin saber cuántos bits necesitaremos. Por ejemplo, si tenemos 4 bits, entonces el número -5 en el enfoque trivial es 1101, en 7 bits sería 1000101. 0001101 (4-bit -5 rellenado con ceros hasta 7 bits de longitud) es en realidad 13 (el bit más significativo es 0, por lo que es positivo).

No haré la tarea por ti, pero puedo darte consejos generales:

Para convertir -x a N bits de la representación del complemento a dos largos:

  1. Convierta -x a binario usando el complemento de dos.
  2. A la izquierda, rellénelo con ceros hasta N-1 de longitud.
  3. Agregue el bit de signo negativo en el lado izquierdo.

Creo que puedes deducir el resto de esta respuesta. Si tienes más preguntas, deja un comentario.

16
gronostaj

Bueno, después de obtener el complemento de los dos, debe agregar un 0 en el extremo del binario para que sea de 10 bits. La parte difícil es que necesita poner un bit con signo para mostrar que el binario es de un entero negativo, es decir (1) 0001000111

0
Elijah Makau