2010-07-03 17 views
0

Si sur mon compilateur, int est de 16 bits, alors sa portée est de -32768 à 32767 (dans une machine à complément de 2).
Je veux savoir pourquoi les nombres négatifs ont 1 supplémentaire. Par exemple, les nombres positifs vont à 32767 mais négatifs vont à un de plus, c'est-à-dire 32768.Pourquoi polariser vers des nombres négatifs?

Comment -32768 est représenté sur un complément à 2 m/c?

Répondre

6

Sur 16 bits, vous pouvez adapter la puissance (2,16) (2 à la puissance de seizième) différentes combinaisons pour représenter 65536 nombres. Il a été décidé que le zéro est mieux représenté nativement que 000 ... 000 et que les nombres positifs dans le système "deux de complément" sont normalement lisibles (ils sont égaux à la représentation "naturelle binaire" comme 0000 0000 0000 0101 = 5 décimal etc.) .

Les nombres négatifs dans le complément à deux commencent par 1111 1111 1111 1111 pour représenter -1. Pensez-y comme un contre-cadran avec des chiffres qui vont 997, 998, 999 et soudainement quand il doit représenter 1000 il déborde et montre 000. Le principe est le même ici, mais la direction est différente - à partir de ... 000 à ... 111. -2 est représenté par 1111 .... 1110 et ainsi de suite.

Le plus petit nombre possible dans le complément à deux aura 1 sur le devant et des zéros sur le reste des chiffres.

+0

Donc dans le complément 2, est-ce qu'un bit est réservé au signe? Je pensais qu'il est réservé uniquement en représentation de signe-amplitude –

+0

Non, pas vraiment réservé. Le bit le plus à gauche contient vraiment une valeur, 0 s'il est défini sur 0, -32768 s'il est défini sur 1. Il peut être utilisé pour vérifier si le nombre est positif ou négatif (exactement comme le signe-magnitude), mais le compilateur prendra en charge pour vous lorsque vous utilisez des entiers signés/non signés. Si cela vous intéresse plus, vous pouvez lire sur "extension de signe" ... C'est un truc assez drôle que dans les entiers 8 bits "-1" est "1111 1111" et dans 16 bits c'est "1111 1111 1111 1111" (les signes les plus à gauche identiques n'ont pas d'importance, à peu près comme "0000 0101" = "101" = 5). – eyescream

1

Il n'y a pas vraiment de 'biais'. Le nombre est négatif lorsque le bit le plus significatif est défini. Pour « espace nombre positif » (i.e., MSB est pas ensemble), ainsi que 1-32767, vous avez zéro, d'où l'absence apparente de 32768.

-32768 serait représenté par 0b1000000000000000. Voir link text

3

Si vous êtes à la recherche d'un simple, vers le bas pour répondre à la terre:

Il n'y a pas de parti pris. Il y a une quantité égale de nombres sur le côté positif et négatif, les nombres positifs commencent juste de 0 et négatifs de -1, d'où la différence d'un. :)

1

Il n'y a pas de zéro négatif. (-0). C'est pourquoi cela semble être un biais. Vraiment, il est considéré comme négatif si le dernier bit est défini. Il y a encore un autre 7 bits dans un octet qui peut être défini à la fois dans la plage positive et négative.

1

Une autre façon d'y penser est de créer une variable 1 bit signée. Signé signifie qu'il doit y avoir des nombres négatifs et bien sûr il y aura des nombres positifs. Donc, vous pouvez avoir 1 positif un négatif, quels sont les deux chiffres que vous pic? laisse maintenant faire 2 bits, quel 2 positif et négatif pic tu? vraiment le secret est le dernier bit représente négatif.

Theres travail supplémentaire si l'on veut considérer 0 un nombre négatif. et il serait inutile d'avoir une valeur négative de 0.