web-dev-qa-db-fra.com

Conversion de décimal négatif en binaire

J'ai essayé de convertir le nombre -441 en binaire, mais je ne sais pas vraiment comment y parvenir.

J'ai d'abord converti 441 en binaire qui est: 110111001 Ensuite, je suis supposé prendre le complément de ce nombre qui est: 001000110 Et puis, je devrais en ajouter un qui donnerait: 001000111

L’exercice dit que je dois donner la représentation binaire en 10 bits et 16 bits, et donc je pensais pouvoir mettre un zéro avant le nombre et c’est tout, mais après de nombreuses recherches, j’ai découvert que je devais mettre un UN avant le numéro, pourquoi est-ce le cas?

Comment pourrais-je convertir environ -441 en un nombre de 16 bits?

Je vous remercie.

7
Maxim

Vous êtes confus parce que vous avez oublié qu'il doit y avoir quelque chose qui distingue les nombres positifs des nombres négatifs.

Supposons que vous souhaitiez stocker des nombres non négatifs sur 8 bits.

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

Ainsi, vous pouvez stocker des numéros dans la plage 0-255 sur 8 bits. 255 = 28 - 1. (2 est la base du système binaire, 8 le nombre de bits, 1 est soustrait car nous voulons compter 0 dans)

Supposons maintenant que vous souhaitiez également stocker des nombres négatifs. Comment pouvons-nous y parvenir? Nous pouvons dédier un bit pour le signe. Si ce bit est 0, nous interprétons les 7 autres bits comme un nombre positif, sinon comme un nombre négatif. Il est préférable d'utiliser le bit le plus significatif pour le signe, car cela facilite certaines opérations.

  • Approche triviale: Il suffit de lire un nombre tel quel:

    • 00000001 == 1 et 10000001 == -1
    • 01000010 == 66 et 11000010 == -66
    • 01111111 == 127 et 11111111 == -127
  • Complément des ones: Pour tout nombre x, renverser sa représentation binaire donne une représentation binaire de -x. Cela signifie que:

    • 00000001 == 1 et 11111110 == -1
    • 01000010 == 66 et 10111101 == -66
    • 01111111 == 127 et 10000000 == -127
  • Complément à deux: Pour tout nombre x, renverser sa représentation binaire et ajouter 1 donnent une représentation binaire de -x. Cela signifie que:

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

Pourquoi le complément à deux est-il le meilleur?

  • Parce qu'il a la plage la plus large: -128 ... 127, alors que l'approche triviale et son complément ont -127 ... 127
  • Zéro est bien défini:
    • Dans le complément à deux seulement, 00000000 vaut zéro
    • Dans une approche triviale, 00000000 et 10000000 valent zéro
    • Dans le complément de uns, 00000000 et 11111111 valent zéro
  • L'addition et la soustraction sont identiques à celles des nombres non signés, de sorte que le processeur n'a pas besoin d'instructions supplémentaires pour l'ajout de nombres signés.

Notez que si nous dédions le bit le plus significatif au bit de signe, nous ne pouvons pas convertir un nombre en binaire sans savoir combien de bits nous aurons besoin. Par exemple, si nous avons 4 bits, le nombre -5 dans une approche triviale est 1101, sur 7 bits, il serait 1000101. 0001101 (4 bits sur-5 complétée avec des zéros d'une longueur de 7 bits) correspond en fait à 13 (le bit le plus significatif est 0, il est donc positif).

Je ne ferai pas les devoirs pour vous, mais je peux vous donner des conseils généraux:

Pour convertir -x en N bits, la représentation du complément à deux longs:

  1. Convertissez -x en binaire en utilisant le complément à deux.
  2. Gauche-le avec des zéros jusqu'à N-1 longueur.
  3. Ajoutez le bit de signe négatif sur le côté gauche.

Je pense que vous pouvez comprendre le reste de cette réponse. Si vous avez d'autres questions, laissez un commentaire.

16
gronostaj

Eh bien, après avoir obtenu le complément à deux, vous devez ajouter un 0 à la fin du binaire afin de rendre la notation 10 bits. La difficulté réside dans le fait que vous devez insérer un bit signé pour indiquer que le fichier binaire est un entier négatif, c.-à-d. (1) 0001000111

0
Elijah Makau