Il est fait de sorte que plus n'a pas besoin d'avoir de la logique pour traiter les nombres négatifs. Découvrez l'article sur Wikipédia.
Disons que vous avez deux numéros, 2 et -1. Dans votre "intuition" manière de représenter les nombres, ils seraient en 0010
et 1001
, respectivement (je suis coller à 4 bits pour la taille). En complément à deux, elles sont 0010
et 1111
. Maintenant, disons que je veux ajouter.
En complément à deux outre est très simple. Vous ajoutez des numéros normalement et aucun bit de retenue à la fin est supprimée. Ils sont donc ajouté comme suit:
0010
+ 1111
=10001
= 0001 (discard the carry)
0001
est de 1, ce qui est ce que nous attendions la suite de "2+(-1)".
Mais dans votre "intuitive" de la méthode, l'ajout est plus compliqué:
0010
+ 1001
= 1011
Qui est -3, droit? Plus Simple ne fonctionne pas dans ce cas. Vous avez besoin de noter que l'un des nombres est négatif et l'utilisation d'un algorithme différent si c'est le cas.
Pour cette "intuitive" méthode de stockage, la soustraction est une opération de plus, l'exigence des contrôles supplémentaires sur les numéros avant qu'ils puissent être ajoutés. Puisque vous voulez la plupart des opérations de base (addition, soustraction, etc) pour être aussi rapide que possible, vous avez besoin de stocker des nombres dans une manière qui vous permet d'utiliser le plus simple des algorithmes possible.
En outre, dans le "intuitive" méthode de stockage, il y a deux zéros:
0000 "zero"
1000 "negative zero"
Qui sont intuitivement le même numéro, mais avoir deux valeurs différentes lorsqu'elles sont stockées. Chaque application devra prendre des mesures supplémentaires pour s'assurer que les valeurs non nulles sont pas aussi négatif zéro.
Il y a un autre bonus avec le stockage des entiers de cette façon, et c'est quand vous avez besoin d'étendre la largeur de ce registre, la valeur est stockée dans. Avec en complément à deux, le stockage d'un 4-nombre de bits en 8 bits registre est une question de répéter son bit de poids fort:
0001 (one, in four bits)
00000001 (one, in eight bits)
1110 (negative two, in four bits)
11111110 (negative two, in eight bits)
C'est juste une question de regarder le bit de signe de la plus petite parole et le répéter jusqu'à ce qu'elle augmente la largeur du plus grand mot.
Avec votre méthode, vous devrez effacer le mot de bits, ce qui est un plus en plus padding:
0001 (one, in four bits)
00000001 (one, in eight bits)
1010 (negative two, in four bits)
10000010 (negative two, in eight bits)
Vous devez encore définir les 4 bits dans les deux cas, mais dans le "intuitive" cas, vous devez effacer la 5ème peu aussi. C'est une petite étape supplémentaire dans l'une des plus fondamentales et les opérations les plus courantes présentes dans chaque application.