Comment se fait-il que 2 ~ est -3 ?
Réponses
Trop de publicités?Rappelez-vous que les chiffres sont stockés en complément à deux. Comme un exemple, voici la représentation de -2 en complément à deux: (8 bits)
1111 1110
La façon dont vous obtenez c'est en prenant la représentation binaire d'un nombre, le prendre en complément (en inversant tous les bits) et d'en ajouter un. Deux départs 0000 0010, et en inversant les bits de nous obtenir 1111 1101. L'ajout d'un nous obtient le résultat ci-dessus. Le premier bit est le bit de signe, ce qui implique un négatif.
Donc, nous allons jeter un oeil à la façon dont nous obtenons ~2 = -3:
Voici deux de nouveau:
0000 0010
Simplement retourner les bits et on obtient:
1111 1101
Eh bien, quoi de -3 ressembler en complément à deux? Commencez avec positive 3: 0000 0011, inverser tous les bits à 1111 1100, et en ajouter un, 1111 1101.
Donc, si vous tout simplement inverser les bits 2, vous obtenez le complément à deux de la représentation de -3.
L'opérateur de complément (~) RETOURNE BITS. C'est à la machine à l'interprétation de ces bits.
~ retourne les bits de la valeur.
Pourquoi 2 ~ est -3 a à voir avec la façon dont les nombres sont représentés au niveau du bit. Les nombres sont représentés comme complément à deux.
Ainsi, 2 est la valeur binaire
Et ~ 2 renverse les bits donc la valeur est maintenant :
Qui est la représentation binaire de -3.
Comme d'autres l'ont mentionné ~
juste retourné bits (les changements de l'un à zéro et zéro ou un) et depuis en complément à deux est utilisé, vous obtenez le résultat que vous avez vu.
Une chose à ajouter, c'est pourquoi en complément à deux est utilisé, c'est ainsi que les opérations sur les nombres négatifs seront les mêmes que sur des nombres positifs. Pensez -3
que le nombre d' 3
doit être ajoutée afin d'obtenir de zéro et vous verrez que ce nombre est 1101
, rappelez-vous que l'ajout binaire est comme à l'école primaire (décimal) plus seulement de vous les porter quand vous arrivez à deux plutôt que 10.
1101 +
0011 // 3
=
10000
=
0000 // lose carry bit because integers have a constant number of bits.
Par conséquent, 1101
est -3
, retourner les morceaux que vous obtenez 0010
, qui est de deux.
Je sais que la réponse à cette question est publié un long retour, mais je voulais partager ma réponse pour la même chose.
Pour trouver le complément d'un nombre, d'abord trouver son équivalent binaire. Ici, nombre à virgule 2
est représenté comme 0000 0010
sous forme binaire. Maintenant, de prendre son complément par inversion (retournement toutes les 1 en 0 et 0 à 1) tous les chiffres de sa représentation binaire, ce qui aura pour résultat:
0000 0010 → 1111 1101
C'est le complément du nombre décimal 2. Et depuis le premier bit, c'est à dire, le bit de signe est à 1 dans le nombre binaire, cela signifie que le signe est négatif pour le numéro enregistré. (ici, le nombre visé est pas 2 mais le complément de 2).
Maintenant, puisque les nombres sont stockés en tant que complément de 2 (en prenant le complément d'un nombre plus un), de sorte à afficher ce nombre binaire, 1111 1101
, en décimal, nous avons d'abord besoin de trouver son complément de 2, qui sera:
1111 1101 → 0000 0010 + 1 → 0000 0011
C'est le complément de 2. La représentation décimale du nombre binaire, 0000 0011
, 3
. Et, depuis, le bit de signe est un comme mentionné ci-dessus, de sorte que le montant de réponse est - -3
.
Astuce: Si vous lisez cette procédure à suivre, alors vous avez observé que le résultat pour le complément de l'opérateur est en fait, le nombre (opérande - sur laquelle cet opérateur est appliqué) et une avec un signe négatif. Vous pouvez essayer avec d'autres numéros de trop.