complément arithmétique à deux

Je pensais sur les plages de types de données, une question se pose. Comme nous le soaps, la plage de caractères signés va de -128 à 127. J’ai le comment 127 qui vient, à savoir 0111111 = +127

Mais je ne pouvais pas savoir comment -128 vient? si nous venons juste de signer le bit, nous obtenons 11111111, comment est-il égal à -128?

La plupart du temps, les ordinateurs utilisent ce qu’on appelle le complément à 2 pour représenter des entiers signés.

Le complément de 2 fonctionne comme suit: les valeurs possibles sont dans une boucle énorme, de 0 à MAX_VALUE, à MIN_VALUE, à zéro, etc.

Donc, la valeur minimale est la valeur maximale +1 – 01111111 = 127 et 10000000 = -128 .

Cela a la propriété agréable de se comporter exactement comme l’arithmétique non signée – si je veux faire -2 + 1 , j’ai 11111110 + 00000001 = 11111111 = -1 , en utilisant le même matériel que pour l’addition non signée.

La raison pour laquelle il existe une valeur supplémentaire au bas de gamme, c’est que nous choisissons d’avoir tous les nombres dont le bit fort est défini, ce qui signifie que 0 enlève une valeur au côté positif.

En complément de deux , -128 est 10000000.

Les nombres négatifs ont le bit de signe défini sur 1; -128 est la valeur avec le bit de signe défini mais pas d’autres bits (c’est-à-dire, il s’agit du plus petit nombre négatif). La représentation binary de -128 est 10000000 . Pour les autres longueurs de données, le plus petit nombre négatif dans le complément à deux est toujours 1000... pour le nombre correct de zéros.

Une façon simple d’y penser est de commencer à 01111111 puis de continuer à soustraire 1 jusqu’à ce qu’il tourne autour; la valeur précédente est la plus petite valeur négative. En soustrayant 1 de 00000000 en utilisant la technique standard “emprunter”, on obtient 11111111, qui est bien la représentation binary pour -1. Nous pouvons continuer à soustraire à 10000000, ce qui correspond à -128, et en soustraire un de plus, nous obtenons à nouveau 01111111.