6
votes

Quel est le plus grand type de données primitive numérique en C ++ (ancien / nouveau standard)

Je suis un peu confus sur l'ancien / nouveau et c'est ma question. Quel est le plus grand type de données primitive numérique dans l'ancien et dans la nouvelle norme C ++? (Entier et Point flottant)

Cordialement et merci à l'avance
Oups

c++

0 commentaires

3 Réponses :


2
votes

0 commentaires

6
votes

Dans la norme de 1998, long int et non signé long int sont les types qui sont au moins aussi gros que l'une des autres types intégrés de la norme (§3.9.1 / 2-3). (Ils peuvent ou non être des types "les plus gros". Il est possible pour long int d'avoir la même taille que int , par exemple. Pour cette affaire, Char pourrait aussi être la même taille.) Le point flottant Double Long fournit au moins autant de précision que les deux autres types de points flottants (§3.9.1 / 8).

Dans le projet de standard pour C ++ 0x ( N3092 ), les types sont long long int et non signé long long long int (§3.9.1 / 2-3). Le type de point flottant le plus précis reste Long Double (§3.9.1 / 8).

Les implémentations peuvent fournir des types plus importants au-delà de ce que la norme appelle. Vérifiez la documentation pour plus de détails à ce sujet.


4 commentaires

Cependant, c ++ 0x a , donc intmax_t et uintmax_t sont les plus gros types d'entiers.


Juste pour l'enregistrement, la norme spécifie des tailles minimales, donc un long int ne peut jamais avoir la même taille qu'un caractère. De la mémoire, un int doit être d'au moins 16 bits de large et un long int au moins 32.


Et en C ++ 0X, même des opérations telles que Tailleof et que les choses peuvent générer des types encore plus gros que non signé long long , mais pas ainsi sur C ++ 03.


@jalf: Je pense qu'ils ne sont que des minimums du bit, donc char pourrait avoir la même taille que long si char_bit était 32, par exemple.



1
votes

in c ++ 03, long [int] et non signé long [int] ont la plus grande plage intégrale et Long Double a le plus grand FP précision et gamme.

in c ++ 0x, intmax_t et uintMax_t a la plus grande gamme intégrale, et peut même être plus grand que long long . Par exemple, il serait raisonnable qu'une implémentation apporte à la fois long et long long 64-bit et faire intmax_t 128-bit.

intmax_t est simplement adopté à partir de C99, de sorte que votre implémentation prend en charge C99, vous n'avez pas besoin d'exiger C ++ 0x. Inclure simplement stdint.h au lieu de cstdint . L'utilisation des en-têtes "C-style" est parfaitement sûre de toute façon, bien que je ne suis pas sûr de vérifier s'il y a un bon moyen de rechercher C99 Typefs au sein de C ++.

Les types de points flottants non nommés avec précision ou de manière appropriée n'ont pas été introduits avec C99 ou C ++ 0x, évitez donc quelque chose comme float64_t ou floatmax_t si vous voulez la portabilité.


1 commentaires

Je pense toujours que intmax_t aurait dû être nommé le plus long long int .