2010-09-29 12 views
7

Possible en double:
What is "2's Complement"?Pourquoi int32 a une valeur maximale 2^31 -1

je sais int32 est a une longueur de 32 bits (4 octets). Je suppose qu'il a 2^32 valeurs, mais comme la moitié d'entre eux doit être sous zéro, je suppose que cela a quelque chose à voir avec cela. Je voudrais savoir pourquoi exactement int32 a max. nombre positif 2^31 -1.

+0

doublon de [Pourquoi la valeur maximale d'un entier n-bit non signé 2^n-1 et non 2^n?] (Https://stackoverflow.com/questions/5771520/why-is-the-maximum -valeur-d'un-un-entier-non-entier-2n-1-et-non-2n) –

Répondre

23

2^32 valeurs possibles

− 2^31 valeurs utilisées pour negative integers

− 1 valeur utilisée pour zéro

= 2^31 − 1 valeurs disponibles pour des nombres entiers positifs

33

Ce bit le plus significatif est utilisé pour coder le signe (1 signifie négatif), donc seulement 31 bits sont disponibles pour la valeur réelle.

Int32.MaxValue = 2^31 - 1 = 01111111111111111111111111111111 
        1  = 00000000000000000000000000000001 
        0  = 00000000000000000000000000000000 
       -1  = 11111111111111111111111111111111 
Int32.MinValue = -2^31  = 10000000000000000000000000000000 
0

Vous avez 2^31 valeurs inférieures à zéro (valeur minimum = -2^31), 2^31-1 valeurs supérieures à zéro et elle-même nulle. Cela fait 2^31 + 2^31-1 + 1 = 2 * 2^31 = 2^32 valeurs :) ...

L'autre explication concerne la façon dont les nombres négatifs sont représentés (en utilisant le double-complément): En peu de temps, le bit le plus significatif indique un nombre négatif, donc vous avez 2^31 nombres positifs (y compris zéro) à gauche, ce qui nous donne la plage 0..2^31-1

4

2^32 est d'environ 4,2 milliards. C'est le nombre maximum de VALEURS qu'un nombre binaire avec 32 chiffres (un nombre de 32 bits) peut représenter.

Ces valeurs peuvent être n'importe quelles valeurs dans n'importe quelle plage. Dans un nombre 32 bits UNSIGNED, les valeurs valides vont de 0 à 2^32-1 (au lieu de 1 à 2^32, mais le même nombre de VALEURS, environ 4,2 milliards).

Dans un nombre SIGNÉ de 32 bits, l'un des 32 bits est utilisé pour indiquer si le nombre est négatif ou non. Cela réduit le nombre de valeurs de 2^1, ou de moitié. Cela laisse 2^31, ce qui est d'environ 2,1 milliards. Cela signifie que la fourchette est maintenant d'environ -2,1 milliards à 2,1 milliards. Même nombre de valeurs, plage différente.