-JoLaFouine- a écrit :
Oui d'accord mais si je met 1 devant le chiffre pour montrer qu'il est négatif ça veut aussi dire un autre nombre, donc c'est pas possible que pour montrer qu'il est négatif on doit mettre un 1 devant.
Exemple : 2 en binaire s'écrit 10 et je met donc 110 pour montrer qu'il est négatif, or 110 fait 5 normalement !!
|
Non.
Il y a diverses chose à prendre en compte:
- Une variable est stockée dans un espace de taille fixe, multiple d'un octet. Actuellement, 8, 16, 32 ou 64 bits actuellement. Donc le "0" s'écrit réellement 00000000 (ou 00 en hexadécimal).
Le binaire n'est naturellement pas signé, un octet va de 0 à 255 point barre. Les hommes ayant découvert leur besoin d'utiliser des positifs et des négatifs, ils ont commencé à mettre en place des notations spécifiques sur les nombres spécifiés comme étant signés.
La première notation, c'est de coder un nombre précédement sur 8 bits sur seulement 7, et un nombre sur 16 bits passe à 15, ...
Résultat, on perd la moitié des valeurs (7bits => 0-127), mais le premier bit sert de bit de signe (là encore uniquement quand la valeur est interprétée comme signée).
=> si le bit "0" de l'octet est à "0" on est en positif, sinon on est en négatif. Inconvénient de la méthode, 00000000 est équivalent à 10000000 (tous deux sont égaux à "0" ), on perd une valeur "pour rien". On a donc mis en place le complément à deux: pour avoir un nombre négatif, on prend sa version positive (ex: 00000101 pour "5" ), on inverse chaque bit ce qui nous donne le complément à 1 (=> 11111010) et on ajoute "1" (=> 11111011), résultat sur 8 bits on peut représenter les valeurs de -128 à 127.
On notera une chose très intéressante avec le complément à deux: sommer deux nombres opposés en complément à deux donne effectivement "0"
00000101
+ 11111011
1 00000000 |
le bit de retenue passe à "1", mais on peut parfaitement l'ignorer puisqu'il est hors limite (retenue/overflow)
et le bit de poids fort étant bien à "1", on a effectivement un nombre négatif (le bit de poids fort étant un indicateur de signe, mais pas un simple "bit de signe" )
Message édité par masklinn le 22-09-2005 à 07:06:12
---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody