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?
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 .
Parce qu'un bit est utilisé pour stocker le signe (Int32 peut être inférieur à zéro).
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.
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
.
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!)
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