2010-04-26 9 views
2

je datatypes appris la gamme de int et long sur 32 bit windows est:Plage de int et long

signed int: -32767 to 32767 
signed long: -2147483647 to 2147483647 

pourquoi l'int a même plage que celle de type long comme mentionné sur msdn? http://msdn.microsoft.com/en-us/library/s3f49ktz%28VS.80%29.aspx

+0

@ n00b8688: vous vouliez dire -32768 à 32767 et -2147483648 à 2147483647? – SyntaxT3rr0r

+0

Je voulais dire l'int signé -2 147 483 648 à 2 147 483 647 sur msdn. – n00b8688

Répondre

0

Je suppose que vous vouliez écrire ceci:

signed int: -2147483647 to 2147483647 
... 

Ils sont les mêmes pour des raisons tout à fait historique. La norme C++ n'impose pas une taille particulière pour chaque type, la seule garantie entre ces deux types est sizeof(int) <= sizeof(long).

0

Vous int comparerait au __int16 alors que votre longue comparerait à __int32.

Vous devez regarder la colonne Bytes pour que cela ait plus de sens.

2

Votre prémisse est erronée. int et long sont tous deux 32 bits sur (tous les deux) Windows 32 et 64 bits.

+0

+1: Windows 64 bits utilise le modèle LLP64, tandis que le monde civilisé utilise LP64 sur Linux 64 bits et autres. –

+1

@Paul, je ne suis pas d'accord que [LP64 est nécessairement mieux si] (http://blogs.msdn.com/oldnewthing/archive/2005/01/31/363790.aspx). –

0

Lorsque l'on travaille avec des représentations binaires des entiers on peut calculer la portée maximale du type de données signées sur la base du nombre de bits utilisés pour représenter les données en utilisant la formule:

valeur la plus basse: -2^(N-1) valeur la plus élevée: 2^(N-1) - 1

où N est le nombre de bits.

Pour une raison ou pour une autre, le type "signed int" dont vous parlez est représenté par 16 bits, et le "signed long" est représenté par 32 bits. Notez également que les plages que vous avez indiquées semblent incomplètes, notez que la plage d'un entier signé 16 bits descend à -32768, soit une valeur inférieure à votre plage affichée.

Questions connexes