Namensräume
Varianten
Aktionen

Ganzzahltypen mit fester Breite (seit C++11)

Von cppreference.com
< cpp‎ | types
 
 
Dienstprogramm-Bibliotheken
Sprachunterstützung
Typunterstützung (Basistypen, RTTI)
Bibliotheks-Feature-Test-Makros (C++20)
Programm-Dienstprogramme
Variadische Funktionen
Coroutine-Unterstützung (C++20)
Vertragsunterstützung (C++26)
Drei-Wege-Vergleich
(C++20)
(C++20)(C++20)(C++20)  
(C++20)(C++20)(C++20)

Allgemeine Hilfsmittel
Relationale Operatoren (in C++20 veraltet)
 
Typunterstützung
Basistypen
Ganzzahltypen mit fester Breite (C++11)
Gleitkommatypen mit fester Breite (C++23)
(C++11)    
(C++17)
Numerische Grenzwerte
C-Schnittstelle für numerische Grenzwerte
Laufzeit-Typinformationen
 

Inhalt

[bearbeiten] Typen

Definiert in Header <cstdint>
int8_tint16_tint32_tint64_t
(optional)
vorzeichenbehaftete Ganzzahltypen mit exakt 8, 16, 32 bzw. 64 Bit Breite
ohne Auffüllbits und unter Verwendung von 2er-Komplement für negative Werte
(nur bereitgestellt, wenn die Implementierung den Typ direkt unterstützt)
(typedef) [bearbeiten]
int_fast8_tint_fast16_tint_fast32_tint_fast64_t
die schnellsten vorzeichenbehafteten Ganzzahltypen mit mindestens 8, 16, 32 bzw. 64 Bit Breite
(typedef) [bearbeiten]
int_least8_tint_least16_tint_least32_tint_least64_t
die kleinsten vorzeichenbehafteten Ganzzahltypen mit mindestens 8, 16, 32 bzw. 64 Bit Breite
(typedef) [bearbeiten]
intmax_t
der vorzeichenbehaftete Ganzzahltyp mit der maximalen Breite
(typedef) [bearbeiten]
intptr_t
(optional)
ein vorzeichenbehafteter Ganzzahltyp, der einen Zeiger auf void aufnehmen kann
(typedef) [bearbeiten]
uint8_tuint16_tuint32_tuint64_t
(optional)
vorzeichenlose Ganzzahltypen mit exakt 8, 16, 32 bzw. 64 Bit Breite
(nur bereitgestellt, wenn die Implementierung den Typ direkt unterstützt)
(typedef) [bearbeiten]
uint_fast8_tuint_fast16_tuint_fast32_tuint_fast64_t
die schnellsten vorzeichenlosen Ganzzahltypen mit mindestens 8, 16, 32 bzw. 64 Bit Breite
(typedef) [bearbeiten]
uint_least8_tuint_least16_tuint_least32_tuint_least64_t
die kleinsten vorzeichenlosen Ganzzahltypen mit mindestens 8, 16, 32 bzw. 64 Bit Breite
(typedef) [bearbeiten]
uintmax_t
der vorzeichenlose Ganzzahltyp mit der maximalen Breite
(typedef) [bearbeiten]
uintptr_t
(optional)
ein vorzeichenloser Ganzzahltyp, der einen Zeiger auf void aufnehmen kann
(typedef) [bearbeiten]

Die Implementierung kann Typedef-Namen intN_t, int_fastN_t, int_leastN_t, uintN_t, uint_fastN_t und uint_leastN_t definieren, wenn N nicht 8, 16, 32 oder 64 ist. Typedef-Namen der Form intN_t dürfen nur definiert werden, wenn die Implementierung einen Ganzzahltyp dieser Breite ohne Padding unterstützt. Somit bezeichnet std::uint24_t einen vorzeichenlosen Ganzzahltyp mit einer Breite von exakt 24 Bits.

Jedes der unten aufgeführten Makros ist definiert, genau dann, wenn die Implementierung den entsprechenden Typedef-Namen definiert. Die Makros INTN_C und UINTN_C entsprechen den Typedef-Namen int_leastN_t bzw. uint_leastN_t.

[bearbeiten] Makro-Konstanten

Definiert in Header <cstdint>
Vorzeichenbehaftete Ganzzahlen : Minimalwert
INT8_MININT16_MININT32_MININT64_MIN
(optional)
Minimalwert von std::int8_t, std::int16_t, std::int32_t und std::int64_t.
(Makro-Konstante) [bearbeiten]
INT_FAST8_MININT_FAST16_MININT_FAST32_MININT_FAST64_MIN
Minimalwert von std::int_fast8_t, std::int_fast16_t, std::int_fast32_t und std::int_fast64_t.
(Makro-Konstante) [bearbeiten]
INT_LEAST8_MININT_LEAST16_MININT_LEAST32_MININT_LEAST64_MIN
Minimalwert von std::int_least8_t, std::int_least16_t, std::int_least32_t und std::int_least64_t.
(Makro-Konstante) [bearbeiten]
INTPTR_MIN
(optional)
Minimalwert von std::intptr_t.
(Makro-Konstante) [bearbeiten]
INTMAX_MIN
Minimalwert von std::intmax_t.
(Makro-Konstante) [bearbeiten]
Vorzeichenbehaftete Ganzzahlen : Maximalwert
INT8_MAXINT16_MAXINT32_MAXINT64_MAX
(optional)
Maximalwert von std::int8_t, std::int16_t, std::int32_t und std::int64_t.
(Makro-Konstante) [bearbeiten]
INT_FAST8_MAXINT_FAST16_MAXINT_FAST32_MAXINT_FAST64_MAX
Maximalwert von std::int_fast8_t, std::int_fast16_t, std::int_fast32_t und std::int_fast64_t.
(Makro-Konstante) [bearbeiten]
INT_LEAST8_MAXINT_LEAST16_MAXINT_LEAST32_MAXINT_LEAST64_MAX
Maximalwert von std::int_least8_t, std::int_least16_t, std::int_least32_t und std::int_least64_t.
(Makro-Konstante) [bearbeiten]
INTPTR_MAX
(optional)
Maximalwert von std::intptr_t.
(Makro-Konstante) [bearbeiten]
INTMAX_MAX
Maximalwert von std::intmax_t.
(Makro-Konstante) [bearbeiten]
Vorzeichenlose Ganzzahlen : Maximalwert
UINT8_MAXUINT16_MAXUINT32_MAXUINT64_MAX
(optional)
Maximalwert von std::uint8_t, std::uint16_t, std::uint32_t und std::uint64_t.
(Makro-Konstante) [bearbeiten]
UINT_FAST8_MAXUINT_FAST16_MAXUINT_FAST32_MAXUINT_FAST64_MAX
Maximalwert von std::uint_fast8_t, std::uint_fast16_t, std::uint_fast32_t und std::uint_fast64_t.
(Makro-Konstante) [bearbeiten]
UINT_LEAST8_MAXUINT_LEAST16_MAXUINT_LEAST32_MAXUINT_LEAST64_MAX
Maximalwert von std::uint_least8_t, std::uint_least16_t, std::uint_least32_t und std::uint_least64_t.
(Makro-Konstante) [bearbeiten]
UINTPTR_MAX
(optional)
Maximalwert von std::uintptr_t.
(Makro-Konstante) [bearbeiten]
UINTMAX_MAX
Maximalwert von std::uintmax_t.
(Makro-Konstante) [bearbeiten]

[bearbeiten] Funktionsmakros für Konstanten von Ganzzahltypen mit minimaler Breite

INT8_CINT16_CINT32_CINT64_C
expandiert zu einem Ganzzahlkonstanten-Ausdruck mit dem durch das Argument angegebenen Wert und dessen Typ der promotete Typ von std::int_least8_t, std::int_least16_t, std::int_least32_t und std::int_least64_t ist.
(Funktionsmakro) [bearbeiten]
INTMAX_C
expandiert zu einem Ganzzahlkonstanten-Ausdruck mit dem durch das Argument angegebenen Wert und dem Typ std::intmax_t.
(Funktionsmakro) [bearbeiten]
UINT8_CUINT16_CUINT32_CUINT64_C
expandiert zu einem Ganzzahlkonstanten-Ausdruck mit dem durch das Argument angegebenen Wert und dessen Typ der promotete Typ von std::uint_least8_t, std::uint_least16_t, std::uint_least32_t und std::uint_least64_t ist.
(Funktionsmakro) [bearbeiten]
UINTMAX_C
expandiert zu einem Ganzzahlkonstanten-Ausdruck mit dem durch das Argument angegebenen Wert und dem Typ std::uintmax_t.
(Funktionsmakro) [bearbeiten]
#include <cstdint>
UINT64_C(0x123) // expands to a literal of type uint_least64_t and value 0x123

[bearbeiten] Formatmakro-Konstanten

Definiert in Header <cinttypes>

[bearbeiten] Formatkonstanten für die Familie der Funktionen std::fprintf

Jedes der hier aufgeführten PRI-Makros ist definiert, wenn die Implementierung den entsprechenden Typedef-Namen definiert.

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




std::intx_t




std::int_leastx_t
std::int_fastx_t
std::intmax_t
std::intptr_t
d Ausgabe eines vorzeichenbehafteten Dezimalganzzahlwerts PRIdx PRIdLEASTx PRIdFASTx PRIdMAX PRIdPTR
i PRIix PRIiLEASTx PRIiFASTx PRIiMAX PRIiPTR
u Ausgabe eines vorzeichenlosen Dezimalganzzahlwerts PRIux PRIuLEASTx PRIuFASTx PRIuMAX PRIuPTR
o Ausgabe eines vorzeichenlosen Oktalganszzahlwerts PRIox PRIoLEASTx PRIoFASTx PRIoMAX PRIoPTR
x Ausgabe eines vorzeichenlosen, kleingeschriebenen Hexadezimalganzzahlwerts PRIxx PRIxLEASTx PRIxFASTx PRIxMAX PRIxPTR
X Ausgabe eines vorzeichenlosen, großgeschriebenen Hexadezimalganzzahlwerts PRIXx PRIXLEASTx PRIXFASTx PRIXMAX PRIXPTR

[bearbeiten] Formatkonstanten für die Familie der Funktionen std::fscanf

Jedes der hier aufgeführten SCN-Makros ist definiert, wenn die Implementierung den entsprechenden Typedef-Namen definiert und einen geeigneten std::fscanf-Längenmodifikator für den Typ hat.

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




std::intx_t




std::int_leastx_t
std::int_fastx_t
std::intmax_t
std::intptr_t
d Eingabe eines vorzeichenbehafteten Dezimalganzzahlwerts SCNdx SCNdLEASTx SCNdFASTx SCNdMAX SCNdPTR
i Eingabe eines vorzeichenbehafteten Ganzzahlwerts SCNix SCNiLEASTx SCNiFASTx SCNiMAX SCNiPTR
u Eingabe eines vorzeichenlosen Dezimalganzzahlwerts SCNux SCNuLEASTx SCNuFASTx SCNuMAX SCNuPTR
o Eingabe eines vorzeichenlosen Oktalganszzahlwerts SCNox SCNoLEASTx SCNoFASTx SCNoMAX SCNoPTR
x Eingabe eines vorzeichenlosen Hexadezimalganzzahlwerts SCNxx SCNxLEASTx SCNxFASTx SCNxMAX SCNxPTR

[bearbeiten] Hinweise

Da C++ ein Zeichen, das unmittelbar auf einen String-Literal folgt, als benutzerdefinierten String-Literal interpretiert, ist C-Code wie printf("%"PRId64"\n",n); in C++ ungültig und erfordert ein Leerzeichen vor PRId64.

Der C99-Standard schlägt vor, 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) vor dem Einbinden des entsprechenden C-Headers (stdint.h oder inttypes.h) definiert werden. Diese Empfehlung wurde von keinem C++-Standard übernommen und in C11 entfernt. Einige Implementierungen (wie glibc 2.17) versuchen jedoch, 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 keines von beiden kann char sein, unabhängig von dessen Vorzeichen (da char nicht als "vorzeichenbehafteter Ganzzahltyp" oder "vorzeichenloser Ganzzahltyp" betrachtet wird).

[bearbeiten] Beispiel

Siehe auch eine Anmerkung bezüglich Leerzeichen vor Formatmakros, 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

[bearbeiten] Defect Reports

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

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

[bearbeiten] 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 Ganzzahltypen [cstdint]
  • 29.12.2 Header <cinttypes> Synopsis [cinttypes.syn]
  • C++17 Standard (ISO/IEC 14882:2017)
  • 21.4 Ganzzahltypen [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]

[bearbeiten] Siehe auch

C-Dokumentation für Ganzzahltypen mit fester Breite