Quel est l'éventail des valeurs types integer magasin en C++
Peut unsigned long int
tenir à dix chiffres du numéro (1 000 000 000 d' - 9,999,999,999) sur un ordinateur 32 bits?
En outre, ce sont les plages de unsigned long int
, long int
, unsigned int
, short int
, short unsigned int
, et int
?
Vous devez vous connecter pour publier un commentaire.
La minimum plages, vous pouvez compter sur:
short int
etint
: -32,767 à 32 767unsigned short int
etunsigned int
: 0 à 65 535long int
: -2,147,483,647 à 2 147 483 647unsigned long int
: 0 à 4 294 967 295Cela signifie que non,
long int
ne peut pas être invoqué pour stocker n'importe quel numéro à 10 chiffres. Cependant, un plus grand type delong long int
a été introduit à C en C99 et C++ en C++11 (ce type est également souvent pris en charge comme une extension par les compilateurs construit pour les normes les plus anciennes qui n'ont pas l'inclure). Le minimum pour ce type, si votre compilateur prend en charge, est:long long int
: -9,223,372,036,854,775,807 à 9,223,372,036,854,775,807unsigned long long int
: 0 à 18,446,744,073,709,551,615De sorte que le type sera assez grande (encore une fois, si vous l'avez à disposition).
Une remarque pour ceux qui croient que j'ai fait une erreur avec ces limites inférieures - je n'ai pas. Le C-exigences pour les gammes sont écrits afin de permettre un " complément ou en signe de magnitude entier représentations, où le plus faible représentable de la valeur et de la plus haute valeur représentable ne diffèrent que dans le signe. Il est également permis d'avoir une représentation en complément à deux, où la valeur du bit de signe 1 et tous les bits 0 est un piège de la représentation plutôt qu'une valeur juridique. En d'autres termes,
int
est pas nécessaire pour être en mesure de représenter la valeur de -32 768.La taille de la composition numérique des types n'est pas définie dans la norme C++, bien que les tailles minimales sont. La façon de dire de quelle taille ils sont sur votre plate-forme est d'utiliser numérique des limites
Par exemple, la valeur maximale pour un int peut être trouvé par:
Les ordinateurs ne fonctionnent pas en base 10, ce qui signifie que la valeur maximale sera de la forme de la 2n-1, car de la façon dont les numéros de représenter en mémoire. Prenez l'exemple de huit bits (1 octet)
Le droit de la plupart des bits (nombre) lorsque la valeur 1 représente 20, le prochain bit 21, 22 et ainsi de suite jusqu'à ce que nous arrivons à la gauche de la plupart des bits qui, si le nombre n'est pas signée représente 27.
De sorte que le nombre représente 26 + 23 = 64 + 8 = 72, parce que la 4e bit de droite et de 7 bits de droite de gauche sont fixés.
Si l'on met toutes les valeurs de 1:
Le nombre est maintenant (en supposant que unsigned)
128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 255 = 28 - 1
Et comme on peut le voir, c'est la plus grande valeur possible qui peut être représenté avec 8 bits.
Sur ma machine et int et un long sont les mêmes, chacun a pu tenir entre -231 231 - 1. Dans mon expérience, la plupart des communes de taille moderne de 32 bits ordinateur de bureau.
Pour savoir les limites de la votre système:
Noter que
long long
n'est légale que dans le C99 et en C++11.D'autres gens ici poster des liens vers data_sizes et précisions etc.
Je vais vous dire comment le comprendre vous-même.
Écrire une petite application qui va faire ce qui suit.
ce sera (en fonction du compilateur et de l'archicture) imprimer 2, 4 ou 8, en disant: 2 octets 4 octets de long, etc.
Permet de supposer que c'est 4.
Vous voulez maintenant la valeur maximale de 4 octets peuvent stocker, la valeur maximale pour un octet (en hexadécimal)0xFF. La valeur maximale de quatre octets est 0x suivi par 8 f (une paire de f pour chaque octet, le 0x indique au compilateur que la chaîne suivante est un nombre hexadécimal). Maintenant modifiez votre programme pour affecter cette valeur et imprimer le résultat
C'est la valeur max d'un unsigned int peut contenir, montré en base 10 de la représentation.
Maintenant le faire pour les longs, les courts métrages et de toute autre valeur entière vous êtes curieux de savoir.
NB: Cette approche ne fonctionnera pas pour les nombres à virgule flottante (c'est à dire double ou float).
Espère que cette aide
En C++, maintenant int et d'autres données sont stockées à l'aide de 2 du compliment de la méthode.
Cela signifie que la gamme est:
ou -2^31 à 2^31-1
1 bit est réservé à 0 alors valeur positive est un de moins que 2^(31)
Pour unsigned type de données il n'y a pas de bit de signe et de tous les bits de données
; attendu que pour type de données signées MSB est indiqué bit de signe et les bits restants sont pour les données.
Pour trouver la gamme de faire des choses suivantes :
Étape:1 -> découvrez pas d'octets pour le type de données.
Étape:2 -> Appliquer les calculs suivants.
Pour, par exemple,
Unsigned int taille = 4 octets (32 bits) --> Gamme [0 , (2^(32)) - 1]
Pour signé int taille = 4 octets (32 bits) --> Gamme [-(2^(32-1)) , (2^(32-1)) - 1]
Pas, seulement partie des dix chiffres du numéro peut être stockée dans un unsigned long int dont la plage valide est de 0 à 4 294 967 295 .
vous pouvez vous référer à ceci:
http://msdn.microsoft.com/en-us/library/s3f49ktz(SV.80).aspx
Pas
Vous devriez regarder les spécialisations de la numeric_limits<> modèle pour un type donné. Son en-tête.