Namespaces
Variants

Fixed width integer types (since C++11)

From cppreference.net
Utilities library

Inhaltsverzeichnis

Typen

Definiert im Header <cstdint>
int8_t int16_t int32_t int64_t
(optional)
vorzeichenbehafteter Ganzzahltyp mit exakter Breite von 8, 16, 32 bzw. 64 Bits
ohne Padding-Bits und unter Verwendung von 2er-Komplement für negative Werte
(bereitgestellt genau dann, wenn die Implementierung den Typ direkt unterstützt)
(typedef)
int_fast8_t int_fast16_t int_fast32_t int_fast64_t
schnellster vorzeichenbehafteter Ganzzahltyp mit mindestens 8, 16, 32 bzw. 64 Bits Breite
(typedef)
int_least8_t int_least16_t int_least32_t int_least64_t
kleinster vorzeichenbehafteter Ganzzahltyp mit mindestens 8, 16, 32 bzw. 64 Bits Breite
(typedef)
intmax_t
vorzeichenbehafteter Ganzzahltyp mit maximaler Breite
(typedef)
intptr_t
(optional)
vorzeichenbehafteter Ganzzahltyp, der in der Lage ist, einen Zeiger auf void zu halten
(typedef)
uint8_t uint16_t uint32_t uint64_t
(optional)
vorzeichenloser Ganzzahltyp mit exakter Breite von 8, 16, 32 bzw. 64 Bits
(bereitgestellt genau dann, wenn die Implementierung den Typ direkt unterstützt)
(typedef)
uint_fast8_t uint_fast16_t uint_fast32_t uint_fast64_t
schnellster vorzeichenloser Ganzzahltyp mit mindestens 8, 16, 32 bzw. 64 Bits Breite
(typedef)
uint_least8_t uint_least16_t uint_least32_t uint_least64_t
kleinster vorzeichenloser Ganzzahltyp mit mindestens 8, 16, 32 bzw. 64 Bits Breite
(typedef)
uintmax_t
vorzeichenloser Ganzzahltyp mit maximaler Breite
(typedef)
uintptr_t
(optional)
vorzeichenloser Ganzzahltyp, der in der Lage ist, einen Zeiger auf void zu halten
(typedef)

Die Implementierung kann Typedef-Namen definieren int N _t , int_fast N _t , int_least N _t , uint N _t , uint_fast N _t , und uint_least N _t , wenn N nicht 8, 16, 32 oder 64 ist. Typedef-Namen der Form int N _t dürfen nur definiert werden, wenn die Implementierung einen ganzzahligen Typ dieser Breite ohne Füllbits unterstützt. Somit bezeichnet std::uint24_t einen vorzeichenlosen ganzzahligen Typ mit einer exakten Breite von 24 Bits.

Jedes der unten aufgeführten Makros ist genau dann definiert, wenn die Implementierung den entsprechenden Typnamen definiert. Die Makros INT N _C und UINT N _C entsprechen jeweils den Typnamen int_least N _t und uint_least N _t .

Makro-Konstanten

Definiert im Header <cstdint>
Vorzeichenbehaftete Ganzzahlen : Mindestwert
INT8_MIN INT16_MIN INT32_MIN INT64_MIN
(optional)
Mindestwert von std::int8_t , std::int16_t , std::int32_t und std::int64_t jeweils
(Makrokonstante)
INT_FAST8_MIN INT_FAST16_MIN INT_FAST32_MIN INT_FAST64_MIN
Mindestwert von std::int_fast8_t , std::int_fast16_t , std::int_fast32_t und std::int_fast64_t jeweils
(Makrokonstante)
INT_LEAST8_MIN INT_LEAST16_MIN INT_LEAST32_MIN INT_LEAST64_MIN
Mindestwert von std::int_least8_t , std::int_least16_t , std::int_least32_t und std::int_least64_t jeweils
(Makrokonstante)
INTPTR_MIN
(optional)
Mindestwert von std::intptr_t
(Makrokonstante)
INTMAX_MIN
Mindestwert von std::intmax_t
(Makrokonstante)
Vorzeichenbehaftete Ganzzahlen : Maximalwert
INT8_MAX INT16_MAX INT32_MAX INT64_MAX
(optional)
Maximalwert von std::int8_t , std::int16_t , std::int32_t und std::int64_t jeweils
(Makrokonstante)
INT_FAST8_MAX INT_FAST16_MAX INT_FAST32_MAX INT_FAST64_MAX
Maximalwert von std::int_fast8_t , std::int_fast16_t , std::int_fast32_t und std::int_fast64_t jeweils
(Makrokonstante)
INT_LEAST8_MAX INT_LEAST16_MAX INT_LEAST32_MAX INT_LEAST64_MAX
Maximalwert von std::int_least8_t , std::int_least16_t , std::int_least32_t und std::int_least64_t jeweils
(Makrokonstante)
INTPTR_MAX
(optional)
Maximalwert von std::intptr_t
(Makrokonstante)
INTMAX_MAX
Maximalwert von std::intmax_t
(Makrokonstante)
Vorzeichenlose Ganzzahlen : Maximalwert
UINT8_MAX UINT16_MAX UINT32_MAX UINT64_MAX
(optional)
Maximalwert von std::uint8_t , std::uint16_t , std::uint32_t und std::uint64_t jeweils
(Makrokonstante)
UINT_FAST8_MAX UINT_FAST16_MAX UINT_FAST32_MAX UINT_FAST64_MAX
Maximalwert von std::uint_fast8_t , std::uint_fast16_t , std::uint_fast32_t und std::uint_fast64_t jeweils
(Makrokonstante)
UINT_LEAST8_MAX UINT_LEAST16_MAX UINT_LEAST32_MAX UINT_LEAST64_MAX
Maximalwert von std::uint_least8_t , std::uint_least16_t , std::uint_least32_t und std::uint_least64_t jeweils
(Makrokonstante)
UINTPTR_MAX
(optional)
Maximalwert von std::uintptr_t
(Makrokonstante)
UINTMAX_MAX
Maximalwert von std::uintmax_t
(Makrokonstante)

Funktionsmakros für Ganzzahlkonstanten mit Mindestbreite

INT8_C INT16_C INT32_C INT64_C
erweitert sich zu einem ganzzahligen konstanten Ausdruck mit dem durch sein Argument spezifizierten Wert und dessen Typ der heraufgestufte Typ von std::int_least8_t , std::int_least16_t , std::int_least32_t bzw. std::int_least64_t ist
(Funktionsmakro)
INTMAX_C
erweitert sich zu einem ganzzahligen konstanten Ausdruck mit dem durch sein Argument spezifizierten Wert und dem Typ std::intmax_t
(Funktionsmakro)
UINT8_C UINT16_C UINT32_C UINT64_C
erweitert sich zu einem ganzzahligen konstanten Ausdruck mit dem durch sein Argument spezifizierten Wert und dessen Typ der heraufgestufte Typ von std::uint_least8_t , std::uint_least16_t , std::uint_least32_t bzw. std::uint_least64_t ist
(Funktionsmakro)
UINTMAX_C
erweitert sich zu einem ganzzahligen konstanten Ausdruck mit dem durch sein Argument spezifizierten Wert und dem Typ std::uintmax_t
(Funktionsmakro)
#include <cstdint>
UINT64_C(0x123) // erweitert zu einem Literal vom Typ uint_least64_t mit dem Wert 0x123

Format-Makrokonstanten

Definiert im Header <cinttypes>

Formatkonstanten für die std::fprintf -Funktionsfamilie

Jedes der hier aufgeführten PRI Makros ist genau dann definiert, wenn die Implementierung den entsprechenden Typnamen definiert.

Äquivalent
für int oder
unsigned int
Beschreibung Makros für Datentypen




std::int x _t




std::int_least x _t
std::int_fast x _t
std::intmax_t
std::intptr_t
d Ausgabe eines vorzeichenbehafteten dezimalen Ganzzahlwerts PRId x PRIdLEAST x PRIdFAST x PRIdMAX PRIdPTR
i PRIi x PRIiLEAST x PRIiFAST x PRIiMAX PRIiPTR
u Ausgabe eines vorzeichenlosen dezimalen Ganzzahlwerts PRIu x PRIuLEAST x PRIuFAST x PRIuMAX PRIuPTR
o Ausgabe eines vorzeichenlosen oktalen Ganzzahlwerts PRIo x PRIoLEAST x PRIoFAST x PRIoMAX PRIoPTR
x Ausgabe eines vorzeichenlosen hexadezimalen Ganzzahlwerts in Kleinbuchstaben PRIx x PRIxLEAST x PRIxFAST x PRIxMAX PRIxPTR
X Ausgabe eines vorzeichenlosen hexadezimalen Ganzzahlwerts in Großbuchstaben PRIX x PRIXLEAST x PRIXFAST x PRIXMAX PRIXPTR

Formatkonstanten für die std::fscanf -Funktionsfamilie

Jedes der hier aufgeführten SCN Makros ist genau dann definiert, wenn die Implementierung den entsprechenden Typnamen definiert und einen geeigneten std::fscanf Längenmodifikator für den Typ besitzt.

Äquivalent
für int oder
unsigned int
Beschreibung Makros für Datentypen




std::int x _t




std::int_least x _t
std::int_fast x _t
std::intmax_t
std::intptr_t
d Eingabe eines vorzeichenbehafteten dezimalen Ganzzahlwerts SCNd x SCNdLEAST x SCNdFAST x SCNdMAX SCNdPTR
i Eingabe eines vorzeichenbehafteten Ganzzahlwerts SCNi x SCNiLEAST x SCNiFAST x SCNiMAX SCNiPTR
u Eingabe eines vorzeichenlosen dezimalen Ganzzahlwerts SCNu x SCNuLEAST x SCNuFAST x SCNuMAX SCNuPTR
o Eingabe eines vorzeichenlosen oktalen Ganzzahlwerts SCNo x SCNoLEAST x SCNoFAST x SCNoMAX SCNoPTR
x Eingabe eines vorzeichenlosen hexadezimalen Ganzzahlwerts SCNx x SCNxLEAST x SCNxFAST x SCNxMAX SCNxPTR

Hinweise

Da C++ ein Zeichen unmittelbar nach einem String-Literal als ein benutzerdefiniertes String-Literal interpretiert, ist C-Code wie printf ( "%" PRId64 " \n " ,n ) ; ungültiges C++ und erfordert ein Leerzeichen vor PRId64 .

Der C99-Standard empfiehlt, dass C++-Implementierungen die oben genannten Grenz-, Konstanten- oder Formatmakros nicht definieren sollten, es sei denn, die Makros __STDC_LIMIT_MACROS , __STDC_CONSTANT_MACROS oder __STDC_FORMAT_MACROS (jeweils) sind definiert, bevor der entsprechende C-Header ( stdint.h oder inttypes.h ) eingebunden wird. Diese Empfehlung wurde von keinem C++-Standard übernommen und in C11 entfernt. Allerdings versuchen einige Implementierungen (wie glibc 2.17), diese Regel anzuwenden, und es kann notwendig sein, die __STDC -Makros zu definieren; C++-Compiler können versuchen, dies zu umgehen, indem sie sie unter bestimmten Umständen automatisch definieren.

std::int8_t kann signed char sein und std::uint8_t kann unsigned char sein, aber keiner von beiden kann char sein, unabhängig von dessen Vorzeichenbehaftung (da char nicht als "vorzeichenbehafteter Ganzzahltyp" oder "vorzeichenloser Ganzzahltyp" betrachtet wird).

Beispiel

Siehe auch den Hinweis bezüglich Leerzeichen vor Format-Makros , die in diesem Beispiel verwendet werden.

#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);
}

Mögliche Ausgabe:

8
lld
-9223372036854775808
+9223372036854775807
+7

Fehlerberichte

Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR Angewendet auf Verhalten wie veröffentlicht Korrektes Verhalten
LWG 2820 C++11 die Anforderungen für optionale Typedef-Namen und Makros waren inkonsistent mit C konsistent gemacht

Referenzen

  • C++23-Standard (ISO/IEC 14882:2024):
  • 17.4.1 Header <cstdint> Synopsis [cstdint.syn]
  • 31.13.2 Header <cinttypes> Synopsis [cinttypes.syn]
  • C++20-Standard (ISO/IEC 14882:2020):
  • 17.4 Integer-Typen [cstdint]
  • 29.12.2 Header <cinttypes>-Synopsis [cinttypes.syn]
  • C++17-Standard (ISO/IEC 14882:2017):
  • 21.4 Integer-Typen [cstdint]
  • 30.11.2 Header <cinttypes>-Synopsis [cinttypes.syn]
  • C++14-Standard (ISO/IEC 14882:2014):
  • 18.4 Ganzzahltypen [cstdint]
  • 27.9.2 C-Bibliotheksdateien [c.files]
  • C++11-Standard (ISO/IEC 14882:2011):
  • 18.4 Ganzzahltypen [cstdint]
  • 27.9.2 C-Bibliotheksdateien [c.files]

Siehe auch

C-Dokumentation für Fixed width integer types