Je regardais cette vidéo sur les valeurs maximales et minimales des entiers signés.
Prenons un exemple de valeur signée positive - 0000 0001 Le premier bit indique que le nombre est positif et les 7 derniers bits sont le nombre lui-même. Il est donc facilement interprété comme +1.
Prenons maintenant un exemple de valeur signée négative - 1000 0000 qui se révèle être -8. D'accord, l'ordinateur peut comprendre qu'il s'agit d'une valeur négative à cause du premier bit, mais comment diable comprend-il que 000 0000 signifie -8?
En général, comment les valeurs signées négatives sont-elles stockées / interprétées dans un ordinateur?
c
memory
bitwise-operators
bit
arbre discuté
la source
la source
Réponses:
La norme C n'impose aucun moyen particulier de représenter les nombres signés négatifs.
Dans la plupart des implémentations que vous êtes susceptible de rencontrer, les entiers signés négatifs sont stockés dans ce qu'on appelle le complément à deux . L'autre moyen majeur de stocker des nombres signés négatifs est appelé son complément .
Le complément à deux d'un nombre à N bits
x
est défini comme2^N - x
. Par exemple, le complément à deux de 8 bits1
est2^8 - 1
, ou1111 1111
. Le complément à deux de 8 bits8
est2^8 - 8
, ce qui en binaire est1111 1000
. Cela peut également être calculé en retournant les bits dex
et en en ajoutant un. Par exemple:Le complément à un d'un nombre à N bits x est défini comme x avec tous ses bits inversés, en gros.
Le complément à deux présente plusieurs avantages par rapport au complément à un. Par exemple, il n'a pas le concept de «zéro négatif», ce qui, pour une bonne raison, prête à confusion pour de nombreuses personnes. L'addition, la multiplication et la soustraction fonctionnent de la même façon avec les entiers signés implémentés avec deux complétés comme ils le font avec les entiers non signés.
la source
Il existe trois méthodes bien connues pour représenter des valeurs négatives en binaire:
Magnitude signée . C'est le plus facile à comprendre, car il fonctionne de la même manière que nous sommes habitués à traiter des valeurs décimales négatives: la première position (bit) représente le signe (0 pour positif, 1 pour négatif), et les autres bits représentent le nombre . Bien que cela soit facile à comprendre pour nous, il est difficile pour les ordinateurs de travailler, en particulier lors de calculs arithmétiques avec des nombres négatifs.
En amplitude signée 8 bits, la valeur 8 est représentée par 0 0001000 et -8 par 1 0001000.
Un complément . Dans cette représentation, des nombres négatifs sont créés à partir du nombre positif correspondant en inversant tous les bits et pas seulement le bit de signe. Cela facilite le travail avec des nombres négatifs pour un ordinateur, mais a la complication qu'il existe deux représentations distinctes pour +0 et -0. Le retournement de tous les bits rend cela plus difficile à comprendre pour les humains.
Dans le complément à 8 bits, la valeur 8 est représentée par 00001000 et -8 par 11110111.
Complément à deux . Il s'agit de la représentation la plus couramment utilisée de nos jours pour les nombres entiers négatifs car elle est la plus facile à utiliser pour les ordinateurs, mais elle est également la plus difficile à comprendre pour les humains. Lorsque l'on compare les motifs binaires utilisés pour les valeurs négatives entre le complément à un et le complément à deux, on peut observer que le même motif binaire dans le complément à deux code pour le nombre inférieur suivant. Par exemple, 11111111 représente -0 dans le complément à un et -1 dans le complément à deux, et de même pour 10000000 (-127 vs -128).
Dans le complément à 8 bits deux, la valeur 8 est représentée par 00001000 et -8 par 11111000.
la source
Les entiers signés sont stockés à l'aide de http://en.wikipedia.org/wiki/Two%27s%20complement
Vous obtenez alors:
Fondamentalement, il est très facile de compter, vous comptez jusqu'à la moitié du maximum de l'entier signé. Faites un +1, rendez-le négatif et commencez le compte à rebours.
la source