Ganzzahltypen mit fester Breite (seit C++11)
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) |
| int_fast8_tint_fast16_tint_fast32_tint_fast64_t |
die schnellsten vorzeichenbehafteten Ganzzahltypen mit mindestens 8, 16, 32 bzw. 64 Bit Breite (typedef) |
| int_least8_tint_least16_tint_least32_tint_least64_t |
die kleinsten vorzeichenbehafteten Ganzzahltypen mit mindestens 8, 16, 32 bzw. 64 Bit Breite (typedef) |
| intmax_t |
der vorzeichenbehaftete Ganzzahltyp mit der maximalen Breite (typedef) |
| intptr_t (optional) |
ein vorzeichenbehafteter Ganzzahltyp, der einen Zeiger auf void aufnehmen kann (typedef) |
| 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) |
| uint_fast8_tuint_fast16_tuint_fast32_tuint_fast64_t |
die schnellsten vorzeichenlosen Ganzzahltypen mit mindestens 8, 16, 32 bzw. 64 Bit Breite (typedef) |
| uint_least8_tuint_least16_tuint_least32_tuint_least64_t |
die kleinsten vorzeichenlosen Ganzzahltypen mit mindestens 8, 16, 32 bzw. 64 Bit Breite (typedef) |
| uintmax_t |
der vorzeichenlose Ganzzahltyp mit der maximalen Breite (typedef) |
| uintptr_t (optional) |
ein vorzeichenloser Ganzzahltyp, der einen Zeiger auf void aufnehmen kann (typedef) |
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) |
| 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) |
| 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) |
| INTPTR_MIN (optional) |
Minimalwert von std::intptr_t.(Makro-Konstante) |
| INTMAX_MIN |
Minimalwert von std::intmax_t.(Makro-Konstante) |
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) |
| 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) |
| 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) |
| INTPTR_MAX (optional) |
Maximalwert von std::intptr_t.(Makro-Konstante) |
| INTMAX_MAX |
Maximalwert von std::intmax_t.(Makro-Konstante) |
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) |
| 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) |
| 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) |
| UINTPTR_MAX (optional) |
Maximalwert von std::uintptr_t.(Makro-Konstante) |
| UINTMAX_MAX |
Maximalwert von std::uintmax_t.(Makro-Konstante) |
[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) |
| INTMAX_C |
expandiert zu einem Ganzzahlkonstanten-Ausdruck mit dem durch das Argument angegebenen Wert und dem Typ std::intmax_t.(Funktionsmakro) |
| 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) |
| UINTMAX_C |
expandiert zu einem Ganzzahlkonstanten-Ausdruck mit dem durch das Argument angegebenen Wert und dem Typ std::uintmax_t.(Funktionsmakro) |
#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
|