Fixed width integer types (since C++11)
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
|