Namespaces
Variants

Fixed width integer types (since C++11)

From cppreference.net
Utilities library

Table des matières

Types

Défini dans l'en-tête <cstdint>
int8_t int16_t int32_t int64_t
(optionnel)
type entier signé avec une largeur exacte de 8, 16, 32 et 64 bits respectivement
sans bits de remplissage et utilisant le complément à 2 pour les valeurs négatives
(fourni si et seulement si l'implémentation supporte directement le type)
(typedef)
int_fast8_t int_fast16_t int_fast32_t int_fast64_t
type entier signé le plus rapide avec une largeur d'au moins 8, 16, 32 et 64 bits respectivement
(typedef)
int_least8_t int_least16_t int_least32_t int_least64_t
plus petit type entier signé avec une largeur d'au moins 8, 16, 32 et 64 bits respectivement
(typedef)
intmax_t
type entier signé de largeur maximale
(typedef)
intptr_t
(optionnel)
type entier signé capable de contenir un pointeur vers void
(typedef)
uint8_t uint16_t uint32_t uint64_t
(optionnel)
type entier non signé avec une largeur exacte de 8, 16, 32 et 64 bits respectivement
(fourni si et seulement si l'implémentation supporte directement le type)
(typedef)
uint_fast8_t uint_fast16_t uint_fast32_t uint_fast64_t
type entier non signé le plus rapide avec une largeur d'au moins 8, 16, 32 et 64 bits respectivement
(typedef)
uint_least8_t uint_least16_t uint_least32_t uint_least64_t
plus petit type entier non signé avec une largeur d'au moins 8, 16, 32 et 64 bits respectivement
(typedef)
uintmax_t
type entier non signé de largeur maximale
(typedef)
uintptr_t
(optionnel)
type entier non signé capable de contenir un pointeur vers void
(typedef)

L'implémentation peut définir des noms de typedef int N _t , int_fast N _t , int_least N _t , uint N _t , uint_fast N _t , et uint_least N _t lorsque N n'est pas 8, 16, 32 ou 64. Les noms de typedef de la forme int N _t ne peuvent être définis que si l'implémentation prend en charge un type entier de cette largeur sans remplissage. Ainsi, std::uint24_t désigne un type entier non signé d'une largeur exactement égale à 24 bits.

Chacune des macros listées ci-dessous est définie si et seulement si l'implémentation définit le nom de type correspondant. Les macros INT N _C et UINT N _C correspondent respectivement aux noms de types int_least N _t et uint_least N _t .

Constantes de macro

Défini dans l'en-tête <cstdint>
Entiers signés : valeur minimale
INT8_MIN INT16_MIN INT32_MIN INT64_MIN
(optionnel)
valeur minimale de std::int8_t , std::int16_t , std::int32_t et std::int64_t respectivement
(constante macro)
INT_FAST8_MIN INT_FAST16_MIN INT_FAST32_MIN INT_FAST64_MIN
valeur minimale de std::int_fast8_t , std::int_fast16_t , std::int_fast32_t et std::int_fast64_t respectivement
(constante macro)
INT_LEAST8_MIN INT_LEAST16_MIN INT_LEAST32_MIN INT_LEAST64_MIN
valeur minimale de std::int_least8_t , std::int_least16_t , std::int_least32_t et std::int_least64_t respectivement
(constante macro)
INTPTR_MIN
(optionnel)
valeur minimale de std::intptr_t
(constante macro)
INTMAX_MIN
valeur minimale de std::intmax_t
(constante macro)
Entiers signés : valeur maximale
INT8_MAX INT16_MAX INT32_MAX INT64_MAX
(optionnel)
valeur maximale de std::int8_t , std::int16_t , std::int32_t et std::int64_t respectivement
(constante macro)
INT_FAST8_MAX INT_FAST16_MAX INT_FAST32_MAX INT_FAST64_MAX
valeur maximale de std::int_fast8_t , std::int_fast16_t , std::int_fast32_t et std::int_fast64_t respectivement
(constante macro)
INT_LEAST8_MAX INT_LEAST16_MAX INT_LEAST32_MAX INT_LEAST64_MAX
valeur maximale de std::int_least8_t , std::int_least16_t , std::int_least32_t et std::int_least64_t respectivement
(constante macro)
INTPTR_MAX
(optionnel)
valeur maximale de std::intptr_t
(constante macro)
INTMAX_MAX
valeur maximale de std::intmax_t
(constante macro)
Entiers non signés : valeur maximale
UINT8_MAX UINT16_MAX UINT32_MAX UINT64_MAX
(optionnel)
valeur maximale de std::uint8_t , std::uint16_t , std::uint32_t et std::uint64_t respectivement
(constante macro)
UINT_FAST8_MAX UINT_FAST16_MAX UINT_FAST32_MAX UINT_FAST64_MAX
valeur maximale de std::uint_fast8_t , std::uint_fast16_t , std::uint_fast32_t et std::uint_fast64_t respectivement
(constante macro)
UINT_LEAST8_MAX UINT_LEAST16_MAX UINT_LEAST32_MAX UINT_LEAST64_MAX
valeur maximale de std::uint_least8_t , std::uint_least16_t , std::uint_least32_t et std::uint_least64_t respectivement
(constante macro)
UINTPTR_MAX
(optionnel)
valeur maximale de std::uintptr_t
(constante macro)
UINTMAX_MAX
valeur maximale de std::uintmax_t
(constante macro)

Macros de fonction pour les constantes entières de largeur minimale

INT8_C INT16_C INT32_C INT64_C
se développe en une expression constante entière ayant la valeur spécifiée par son argument et dont le type est le type promu de std::int_least8_t , std::int_least16_t , std::int_least32_t et std::int_least64_t respectivement
(macro de fonction)
INTMAX_C
se développe en une expression constante entière ayant la valeur spécifiée par son argument et le type std::intmax_t
(macro de fonction)
UINT8_C UINT16_C UINT32_C UINT64_C
se développe en une expression constante entière ayant la valeur spécifiée par son argument et dont le type est le type promu de std::uint_least8_t , std::uint_least16_t , std::uint_least32_t et std::uint_least64_t respectivement
(macro de fonction)
UINTMAX_C
se développe en une expression constante entière ayant la valeur spécifiée par son argument et le type std::uintmax_t
(macro de fonction)
#include <cstdint>
UINT64_C(0x123) // se développe en un littéral de type uint_least64_t et de valeur 0x123

Constantes de macro de format

Défini dans l'en-tête <cinttypes>

Constantes de format pour la std::fprintf famille de fonctions

Chacune des PRI macros listées ici est définie si et seulement si l'implémentation définit le nom de type correspondant.

Équivalent
pour int ou
unsigned int
Description Macros pour les types de données




std::int x _t




std::int_least x _t
std::int_fast x _t
std::intmax_t
std::intptr_t
d affichage d'une valeur entière décimale signée PRId x PRIdLEAST x PRIdFAST x PRIdMAX PRIdPTR
i PRIi x PRIiLEAST x PRIiFAST x PRIiMAX PRIiPTR
u affichage d'une valeur entière décimale non signée PRIu x PRIuLEAST x PRIuFAST x PRIuMAX PRIuPTR
o affichage d'une valeur entière octale non signée PRIo x PRIoLEAST x PRIoFAST x PRIoMAX PRIoPTR
x affichage d'une valeur entière hexadécimale minuscule non signée PRIx x PRIxLEAST x PRIxFAST x PRIxMAX PRIxPTR
X affichage d'une valeur entière hexadécimale majuscule non signée PRIX x PRIXLEAST x PRIXFAST x PRIXMAX PRIXPTR

Constantes de format pour la famille de fonctions std::fscanf

Chacune des SCN macros listées ici est définie si et seulement si l'implémentation définit le nom de type correspondant et possède un modificateur de longueur std::fscanf approprié pour le type.

Équivalent
pour int ou
unsigned int
Description Macros pour les types de données




std::int x _t




std::int_least x _t
std::int_fast x _t
std::intmax_t
std::intptr_t
d saisie d'une valeur entière décimale signée SCNd x SCNdLEAST x SCNdFAST x SCNdMAX SCNdPTR
i saisie d'une valeur entière signée SCNi x SCNiLEAST x SCNiFAST x SCNiMAX SCNiPTR
u saisie d'une valeur entière décimale non signée SCNu x SCNuLEAST x SCNuFAST x SCNuMAX SCNuPTR
o saisie d'une valeur entière octale non signée SCNo x SCNoLEAST x SCNoFAST x SCNoMAX SCNoPTR
x saisie d'une valeur entière hexadécimale non signée SCNx x SCNxLEAST x SCNxFAST x SCNxMAX SCNxPTR

Notes

Parce que C++ interprète un caractère immédiatement suivant un littéral de chaîne comme un littéral de chaîne défini par l'utilisateur , le code C tel que printf ( "%" PRId64 " \n " ,n ) ; n'est pas valide en C++ et nécessite un espace avant PRId64 .

La norme C99 suggère que les implémentations C++ ne devraient pas définir les macros de limite, constante ou de format ci-dessus, sauf si les macros __STDC_LIMIT_MACROS , __STDC_CONSTANT_MACROS ou __STDC_FORMAT_MACROS (respectivement) sont définies avant l'inclusion de l'en-tête C correspondant ( stdint.h ou inttypes.h ). Cette recommandation n'a été adoptée par aucune norme C++ et a été supprimée dans C11. Cependant, certaines implémentations (comme glibc 2.17) tentent d'appliquer cette règle, et il peut être nécessaire de définir les macros __STDC ; les compilateurs C++ peuvent tenter de contourner ce problème en les définissant automatiquement dans certaines circonstances.

std::int8_t peut être signed char et std::uint8_t peut être unsigned char , mais aucun des deux ne peut être char quelle que soit sa représentation signée (car char n'est pas considéré comme un "type entier signé" ou "type entier non signé").

Exemple

Voir également une note concernant les espaces avant les macros de format utilisées dans cet exemple.

#include <cinttypes>
#include <cstdio>
int main()
{
    std::printf("%zu\n", sizeof(std::int64_t));
    std::printf("%s\n", PRId64);
    std::printf("%+" PRId64 "\n", INT64_MIN);
    std::printf("%+" PRId64 "\n", INT64_MAX);
    std::int64_t n = 7;
    std::printf("%+" PRId64 "\n", n);
}

Sortie possible :

8
lld
-9223372036854775808
+9223372036854775807
+7

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Appliqué à Comportement publié Comportement corrigé
LWG 2820 C++11 les exigences pour les noms de typedef optionnels et les macros étaient incompatibles avec C rendues compatibles

Références

  • Norme C++23 (ISO/CEI 14882:2024) :
  • 17.4.1 En-tête <cstdint> synopsis [cstdint.syn]
  • 31.13.2 En-tête <cinttypes> synopsis [cinttypes.syn]
  • Norme C++20 (ISO/CEI 14882:2020) :
  • 17.4 Types entiers [cstdint]
  • 29.12.2 Synopsis de l'en-tête <cinttypes> [cinttypes.syn]
  • Norme C++17 (ISO/CEI 14882:2017) :
  • 21.4 Types entiers [cstdint]
  • 30.11.2 Synopsis de l'en-tête <cinttypes> [cinttypes.syn]
  • Norme C++14 (ISO/CEI 14882:2014) :
  • 18.4 Types entiers [cstdint]
  • 27.9.2 Fichiers de bibliothèque C [c.files]
  • Norme C++11 (ISO/CEI 14882:2011) :
  • 18.4 Types entiers [cstdint]
  • 27.9.2 Fichiers de la bibliothèque C [c.files]

Voir aussi

Documentation C pour Fixed width integer types