2017-09-24 21 views
1

Je voudrais savoir si ma méthode de détermination des valeurs max et min des types est correcte.J'ai cherché googlé et n'ai pas trouvé de méthodologie exacte pour déterminer celaApproche pour déterminer les valeurs max et min de différents types

Ceci est mon approche: Pour confirmer la taille des types J'utilise this lien maintenant le lien DÉCLARE que la taille de int_32_t (qui par défaut est signé) sera 16 bits en LP32 .Donc maxi 16 bit non est 65535. Mais depuis sa signature, nous obtiendrons un maximum de 65535/2 = 32767.5 donc je suppose que sa gamme sera -32767 to 32767? Ai-je raison ? Et de même pour uint32_t la taille est sera 16 bits en LP32 .So max 16 bits non est 65535 donc la gamme sera 0 to 65535? Ai-je raison ? Aussi, quelle est la différence entre LP32 et ILP32 lequel dois-je suivre?

+0

Vous avez écrit une coutume 'atoi()' fonction? Qu'est-ce qui vous a fait faire ça?:-( – einpoklum

Répondre

1

Vous n'avez aucune hypothèse à formuler. Il suffit d'utiliser les traits standard:

http://en.cppreference.com/w/cpp/types/numeric_limits

Ex:

std::numeric_limits<std::int32_t>::min(); 
std::numeric_limits<std::int32_t>::max(); 

Pour répondre à certaines de vos points:

int_32_t (qui par défaut est signé)

Pas par défaut, mais mandaté par la norme linguistique. C'est un entier signé. L'équivalent non signé est std::uint32_t.

int32_t [...] sera 16 bits

Umm ... Nope. Il est signé type entier avec une largeur d'exactement 32 bits sans bits de remplissage et en utilisant 2 complément à des valeurs négatives (à condition que si la mise en œuvre prend directement en charge le type)

Je suppose sa gamme sera -32767 à 32767? Ai-je raison ?

No. Pour un 16 bits entier signé en utilisant le complément 2 (std::int16_t) la plage est

-32,768 .. 32,767 

Voici comment vous pouvez atteindre ces chiffres:

Le type int a 16 bits (et pas de rembourrage). Avec 16 bits, vous pouvez encoder 2^16 = 65,536 valeurs distinctes. En complément à deux ces valeurs sont réparties comme suit:

  • [0, 32,767]: 32.768 valeurs positives
  • [-32,768, -1]: 32.768 valeurs négatives
+0

Je comprends cela mais je voulais savoir si mon approche est correcte sur la façon de déterminer ces valeurs? – Rajeshwar

+0

@Rajeshwar est-il clair maintenant? – bolov

+0

merci pour la réponse que je suis en train de digérer maintenant. 65536 au lieu de 65.536 – Rajeshwar