Maison  >  Article  >  Pourquoi les nombres négatifs dans les ordinateurs sont-ils stockés en complément à deux ?

Pourquoi les nombres négatifs dans les ordinateurs sont-ils stockés en complément à deux ?

青灯夜游
青灯夜游original
2020-12-08 10:34:4814018parcourir

L'utilisation du stockage du complément à deux pour les nombres négatifs dans les ordinateurs peut simplifier les circuits arithmétiques informatiques de base, de sorte que l'addition et la soustraction ne doivent être mises en œuvre qu'avec des circuits d'addition, et l'addition est utilisée à la place de la soustraction. Le complément est le plus petit reste congru positif d'un nombre négatif, donc l'ajout d'un nombre négatif et la soustraction d'un nombre positif peuvent tous deux être représentés par l'ajout d'un complément.

Pourquoi les nombres négatifs dans les ordinateurs sont-ils stockés en complément à deux ?

L'environnement d'exploitation de ce tutoriel : système Windows 7, ordinateur Dell G3.

1. Introduction

Savez-vous comment les entiers sont stockés dans les ordinateurs ? Est-ce le bit de signe plus le bit de valeur ? Les bits de valeur sont-ils stockés au format binaire normal ?

Si vous répondez oui aux deux dernières questions, cela signifie que lorsqu'il est stocké en binaire 3 bits et que le bit de signe 0 représente positif et 1 représente négatif, 1 sera stocké comme 001 et -1 le sera Enregistrez sous 101. Malheureusement, ce n'est pas le cas. Les ordinateurs stockent actuellement les entiers sous la forme d'un complément à deux au lieu de la forme naturelle. Bien que le complément à deux soit également représenté par le bit de signe plus le bit de valeur, les règles d'expression sont différentes : 1 sera enregistré sous 001, -1 sera enregistré sous 111.

Si vous avez répondu correctement aux trois questions, vous savez que les entiers sont stockés au format complément à deux dans les ordinateurs, mais savez-vous pourquoi ce format est utilisé ? Et "Le complément d'un nombre positif est égal au code d'origine ; le complément d'un nombre négatif est égal au complément plus 1, et le complément est égal au bit de signe du code d'origine inchangé, et le reste les bits sont inversés." Que signifie un tel complément ? Quoi ? (En supposant que vous ne le sachiez pas, veuillez lire sur XD)

Regardons d'abord le but de l'utilisation des codes complément, puis oublions la définition des codes complément ci-dessus. Suivez-moi à partir de cet objectif et explorons le. essence des codes complémentaires étape par étape.
Objectif : Afin de simplifier le circuit de fonctionnement de base de l'ordinateur, l'addition et la soustraction doivent uniquement être mises en œuvre via le circuit d'addition, c'est-à-dire laisser soustraire un nombre positif ou ajouter un nombre négatif De telles opérations. peut être fait avec Ajouter un nombre positif à la place. Ainsi, la forme de stockage des nombres négatifs est modifiée et stockée sous une forme qui peut être directement ajoutée sous forme de nombres positifs. Cette forme est le code complémentaire. (Les nombres positifs n'ont pas besoin d'être modifiés, donc les nombres positifs sont généralement omis dans la discussion suivante)

2. Comment le code complément transforme-t-il la soustraction en addition ?

2.1. Utiliser l'horloge pour comprendre la soustraction et l'addition Vous constatez que l'horloge est à 6 heures, mais il n'est en réalité que 2 heures maintenant, c'est-à-dire , il est en avance de 4 heures. Vous pouvez le corriger de deux manières, l'une consiste à le reculer de 4 heures dans le sens inverse des aiguilles d'une montre jusqu'à 2 heures, et l'autre consiste à composer 6 heures dans le sens des aiguilles d'une montre jusqu'à 12 heures, puis à composer. 2 heures, c'est-à-dire composer 8 heures dans le sens des aiguilles d'une montre jusqu'à 2 heures. Donc pour le cadran de l'horloge, si signifie tourner N heures dans le sens inverse des aiguilles d'une montre, et signifie tourner N heures dans le sens des aiguilles d'une montre, alors

aura aussi

, -N, et même Vous pouvez aussi N. ..-4 = +8-1 = +11Quelles règles sont cachées ici ? En fait, en mathématiques, -5 = +7 peut être classé comme le même type de nombres qui remplissent certaines conditions - -4 = +8 = +20 = +32 = -16 est congru

modulo 12.

-4、+8、+20、+32、-16La définition du module et de la congruence sur le wiki chinois est : deux entiers a et b, si les restes obtenus en les divisant par un entier positif m sont égaux, alors a et b sont dits congruent modulo m.

Dans un système de comptage débordable, si la capacité du système de comptage est prise comme modulo, alors tous les nombres congrus à ce module auront la même représentation dans ce système de comptage, et les opérations sera équivalent.

Par exemple, le cadran de l'horloge dans l'exemple ci-dessus est un système de comptage à débordement, modulo 12, donc

ces nombres qui sont congrus au modulo 12 sont exprimés de la même manière sur le cadran de l'horloge, et ces opérations sont effectuées sur le aiguille des heures Le résultat est le même, ils seront tous composés à la même position.

Un système de comptage composé de binaires à n bits éliminera les bits hauts débordants, c'est donc également un système de comptage débordant, et son module est (2 ^ n). (En comptant de 0 à (2^n -1), tout débordera)
On peut en déduire que dans un système de comptage composé de binaires à 3 chiffres modulo 8, -4、+8、+20、+32、-16 peut utiliser le même nombre binaire Pour exprimer , soustraire 10 et ajouter 14 en même temps obtiendra le même résultat.


-2,-10,6,142.2. Dériver le complément

Donc, tant que le complément est le reste congru positif d'un nombre négatif, alors l'addition peut être réalisée. Ce complément de congruence positif a le même résultat que l'ajout d'un autre nombre négatif. Pour un nombre négatif, il existe d’innombrables congruences positives qui remplissent les conditions. Afin de réduire les opérations inutiles, on peut préciser que le complément est le plus petit nombre positif parmi eux.

Peut-être parce que trouver le code complément à travers le code original est une opération complément modulo, on l'appelle le code complément.

Notez que les codes de complément ici sont tous spécialement marqués par moi, car ce n'est pas le véritable formulaire de complément stocké dans l'ordinateur. Il devrait s'appeler numéro de complément, mais croyez-moi, il est très proche. .

3. Améliorer le code complémentaire

3.1 Il y a encore quelques problèmes avec cette expression de code complémentaire

En convertissant en complément à deux, soustraire un nombre devient effectivement ajouter un nombre. Cela semble très bien, mais il y a un problème évident, c'est-à-dire que le signe du nombre lui-même est perdu.

Par exemple, un binaire à 3 chiffres peut normalement représenter
En utilisant la méthode du complément, il peut remplacer l'opération de 0~7, mais il ne peut pas vraiment représenter -8~-1 car vous ne savez pas s'il s'agit d'un. nombre positif ou négatif. -8~-1 Nous avons converti les nombres négatifs en une forme plus acceptable pour les ordinateurs dans les calculs, mais ils ont perdu les informations le concernant en tant que nombre.

Comment résoudre ce problème ? Certaines personnes peuvent rapidement se gifler : Ajoutez ensuite un chiffre pour indiquer positif ou négatif. Mais que dois-je faire lors du calcul dans ce cas ? Dois-je commencer à compter à partir du deuxième chiffre ? Lors de l'exécution des bits, faut-il faire particulièrement attention à ne pas affecter le bit de signe ? Vous constaterez que le problème n’est pas si simple.

3.2.Comment améliorer le code complémentaire

Je ne sais pas comment Daniel a eu l'idée, le problème a été parfaitement résolu :

    Sous le principe de maintenir les caractéristiques du complément à deux (c'est-à-dire que soustraire un nombre devient toujours ajouter un nombre)
  • Augmenter l'expression du positif et du négatif (peut vraiment exprimer
  • , il suffit de regarder le symbole Que le bit soit 0 ou 1) -8~-1
  • permet également d'effectuer l'opération sans distinguer le bit de signe Le bit de signe est directement utilisé comme bit de valeur pour l'opération. , et le signe du résultat sera naturellement conforme à cette représentation positive et négative. (C'est-à-dire que la retenue du bit de signe et la retenue du bit de valeur seront naturellement raisonnables)
Et la solution est vraiment stupide, étonnamment simple, c'est la solution à laquelle vous avez pensé avant :

Ajoutez un chiffre pour indiquer positif ou négatif .
La méthode spécifique est  : ajoutez un bit de signe au bit haut à gauche. Ce bit de signe, avec le code pseudo-complémentaire que nous avons déduit plus tôt, forme un code complémentaire vraiment parfait. .
Effet obtenu : En lisant le bit de signe, vous pouvez connaître le signe du nombre. En même temps, le bit de signe participe à l'opération, au report et à l'exécution comme le bit de valeur. dans l’opération d’addition.

4. Enfin

Pour résumer

  • Le but de l'utilisation des codes complémentaires : simplifier le calcul de base circuits d'ordinateurs, de sorte que l'addition et la soustraction doivent uniquement être mises en œuvre par le circuit d'addition, et l'addition est utilisée à la place de la soustraction.
  • Pourquoi le code complémentaire peut atteindre cet objectif : le binaire à n bits peut former un système de comptage débordable. Dans un tel système, la capacité du système de comptage est utilisée comme modulo. tous modulo sont congrus à cela. Les nombres auront la même représentation dans ce système de comptage, et les opérations sont équivalentes. Le complément est le plus petit reste congru positif d'un nombre négatif, donc l'ajout d'un nombre négatif et la soustraction d'un nombre positif peuvent tous deux être représentés par l'ajout d'un complément.
  • Comment calculer le complément : Le complément d'un nombre positif est lui-même ; pour un nombre négatif, trouver la congruence positive minimale (modulo la capacité du bit de valeur) et la mettre dans le bit de valeur, avec la position du signe définie sur 1, obtient le complément d'un nombre négatif.
Pour plus d'articles connexes, veuillez visiter le

Site Web PHP chinois ! !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn