web-dev-qa-db-fra.com

Pourquoi la valeur maximale d'Int32 est-elle 0x7FFFFFFF?

J'ai vu dans les documents MSDN que la valeur maximale de Int32 est 2,147,483,647 , hexadécimal 0x7FFFFFFF.

Je pense que si c'est Int32 il doit stocker des valeurs entières de 32 bits qui devraient finalement être 4,294,967,295 et hexadécimal 0xFFFFFFFF.

Ma question est pourquoi Int32 stocke des valeurs entières de 31 bits?

23
Afshin Mehrabani

C'est parce que c'est un entier signé. Un entier 32 bits non signé vous donne la valeur que vous attendez.

Consultez cette page MSDN - http://msdn.Microsoft.com/en-us/library/exx3b86w (v = vs.80) .aspx

Pour une explication plus approfondie sur la raison de cela, consultez le lien dans la réponse de Jackson Popes concernant la représentation du numéro Complément de Deux.

Aussi certains lecture supplémentaire .

34
Lloyd

Parce qu'un bit est utilisé pour stocker le signe (Int32 peut être inférieur à zéro).

http://en.wikipedia.org/wiki/Two%27s_complement

8
Jackson Pope

Int32 et Int64 sont tous deux signés afin de pouvoir gérer des valeurs entières de -capacity/2 à (capacity/2) -1 (pour zéro), c'est pourquoi la valeur maximale n'est pas celle que vous attendiez. Mais vous pouvez obtenir ce que vous voulez en utilisant un entier non signé pour n'avoir que des nombres positifs.

6
marcnc27

Vous ne considérez pas les nombres négatifs. Int32 avoir le signe.

Depuis MSDN: http://msdn.Microsoft.com/en-us/library/system.int32.minvalue.aspx Le MinValue est -2,147,483,648; c'est-à-dire hexadécimal 0x80000000.

5
888

Le premier bit est le signe - un int32 est signé, c'est-à-dire qu'il peut être positif/négatif (enfin je ne devrais probablement pas dire `` premier '' bit!)

5
Charleh

Dans un type à 2 bits signé complément 2, la plage est de -2n-1 à 2n-1-1 car avec n bits vous pouvez représenter 2n différentes valeurs, dont la moitié est utilisée pour les numéros signés en raison du bit de signe. Les 2 restantsn-1 la moitié est utilisée pour un nombre non négatif. Puisqu'un est utilisé pour 0, il n'y en a que 2n-1-1 valeurs restantes pour les nombres positifs

1
phuclv