Ganzzahlkonstante
Ermöglicht die direkte Verwendung von Werten des Ganzzahltyps in Ausdrücken.
Inhalt |
[bearbeiten] Syntax
Eine Ganzzahlkonstante ist ein non-lvalue Ausdruck der Form
| dezimale-konstante ganzzahl-suffix (optional) | (1) | ||||||||
| oktale-konstante ganzzahl-suffix (optional) | (2) | ||||||||
| hexadezimale-konstante ganzzahl-suffix (optional) | (3) | ||||||||
| binäre-konstante ganzzahl-suffix (optional) | (4) | (seit C23) | |||||||
wobei
- dezimale-konstante ist eine von Null verschiedene Dezimalziffer (
1,2,3,4,5,6,7,8,9), gefolgt von null oder mehr Dezimalziffern (0,1,2,3,4,5,6,7,8,9) - oktale-konstante ist die Ziffer Null (
0), gefolgt von null oder mehr Oktalziffern (0,1,2,3,4,5,6,7) - hexadezimale-konstante ist die Zeichenfolge
0xoder die Zeichenfolge0X, gefolgt von einer oder mehreren Hexadezimalziffern (0,1,2,3,4,5,6,7,8,9,a,A,b,B,c,C,d,D,e,E,f,F) - binäre-konstante ist die Zeichenfolge
0boder die Zeichenfolge0B, gefolgt von einer oder mehreren Binärziffern (0,1) - ganzzahl-suffix kann, falls vorhanden, eines der folgenden enthalten (außer dem Vorzeichenlos-Präfix, das mit einem der anderen kombiniert werden kann; wenn zwei Suffixe verwendet werden, können sie in beliebiger Reihenfolge erscheinen)
- vorzeichenlos-suffix (das Zeichen
uoder das ZeichenU) - lang-suffix (das Zeichen
loder das ZeichenL) oder das lang-lang-suffix (die Zeichenfolgelloder die ZeichenfolgeLL)(seit C99) - bit-präzise-ganzzahl-suffix (die Zeichenfolge
wboder die ZeichenfolgeWB) (seit C23)
- vorzeichenlos-suffix (das Zeichen
|
Optionale einfache Anführungszeichen ( |
(seit C23) |
[bearbeiten] Erklärung
a bis f repräsentieren die Dezimalwerte 10 bis 15).Die folgenden Variablen werden mit demselben Wert initialisiert
int d = 42; int o = 052; int x = 0x2a; int X = 0X2A; int b = 0b101010; // C23
Die folgenden Variablen werden ebenfalls mit demselben Wert initialisiert
unsigned long long l1 = 18446744073709550592ull; // C99 unsigned long long l2 = 18'446'744'073'709'550'592llu; // C23 unsigned long long l3 = 1844'6744'0737'0955'0592uLL; // C23 unsigned long long l4 = 184467'440737'0'95505'92LLU; // C23
[bearbeiten] Der Typ der Ganzzahlkonstante
Der Typ der Ganzzahlkonstante ist der erste Typ, in den der Wert passt, aus der Liste der Typen, die von der numerischen Basis und dem verwendeten ganzzahl-suffix abhängen.
| suffix | Dezimalbasen | Andere Basen |
|---|---|---|
| Kein Suffix | int
long int |
int
unsigned int |
u oder U |
unsigned int
unsigned long int |
unsigned int
unsigned long int |
l oder L |
long int
unsigned long int(bis C99) |
long int
unsigned long int |
sowohl l/L als auch u/U |
unsigned long int
unsigned long long int(seit C99) |
unsigned long int
unsigned long long int(seit C99) |
ll oder LL |
long long int(seit C99) | long long int(seit C99) unsigned long long int(seit C99) |
sowohl ll/LL als auch u/U |
unsigned long long int(seit C99) | unsigned long long int(seit C99) |
wb oder WB |
_BitInt(N) wobei die Breite N die kleinste N größer als 1 ist, die den Wert und das Vorzeichenbit aufnehmen kann(seit C23) | _BitInt(N) wobei die Breite N die kleinste N größer als 1 ist, die den Wert und das Vorzeichenbit aufnehmen kann(seit C23) |
sowohl wb/WB als auch u/U |
unsigned _BitInt(N) wobei die Breite N die kleinste N größer als 0 ist, die den Wert aufnehmen kann(seit C23) | unsigned _BitInt(N) wobei die Breite N die kleinste N größer als 0 ist, die den Wert aufnehmen kann(seit C23) |
Wenn der Wert der Ganzzahlkonstante zu groß ist, um in einen der durch Suffix/Basis-Kombination erlaubten Typen zu passen, hat er keine Suffixe wb, WB, uwb oder UWB(seit C23) und der Compiler unterstützt erweiterte Ganzzahltypen (wie z.B. __int128), kann die Konstante den erweiterten Ganzzahltyp erhalten; andernfalls ist das Programm fehlerhaft.
[bearbeiten] Hinweise
Buchstaben in Ganzzahlkonstanten sind nicht case-sensitiv: 0xDeAdBaBeU und 0XdeadBABEu repräsentieren dieselbe Zahl (eine Ausnahme bildet das lang-lang-suffix, das entweder ll oder LL ist, niemals lL oder Ll)(seit C99).
Es gibt keine negativen Ganzzahlkonstanten. Ausdrücke wie -1 wenden den unären Minus-Operator auf den vom konstanten Wert repräsentierten Wert an.
|
Wenn sie in einem Steuerausdruck von #if oder #elif verwendet werden, verhalten sich alle vorzeichenbehafteten Ganzzahlkonstanten so, als hätten sie den Typ intmax_t und alle vorzeichenlosen Ganzzahlkonstanten verhalten sich so, als hätten sie den Typ uintmax_t. |
(seit C99) |
Ganzzahlkonstanten können in ganzzahligen konstanten Ausdrücken verwendet werden.
Aufgrund von maximal munch müssen hexadezimale Ganzzahlkonstanten, die auf e und E enden und von den Operatoren + oder - gefolgt werden, mit Leerzeichen oder Klammern vom Operator im Quelltext getrennt werden
int x = 0xE+2; // error int y = 0xa+2; // OK int z = 0xE +2; // OK int q = (0xE)+2; // OK
Andernfalls wird ein einzelnes ungültiges Präprozessor-Zahl-Token gebildet, was zu einem Fehler bei der weiteren Analyse führt.
[bearbeiten] Beispiel
#include <inttypes.h> #include <stdio.h> int main(void) { printf("123 = %d\n", 123); printf("0123 = %d\n", 0123); printf("0x123 = %d\n", 0x123); printf("12345678901234567890ull = %llu\n", 12345678901234567890ull); // the type is a 64-bit type (unsigned long long or possibly unsigned long) // even without a long suffix printf("12345678901234567890u = %"PRIu64"\n", 12345678901234567890u ); // printf("%lld\n", -9223372036854775808); // Error: // the value 9223372036854775808 cannot fit in signed long long, which // is the biggest type allowed for unsuffixed decimal integer constant printf("%llu\n", -9223372036854775808ull ); // unary minus applied to unsigned value subtracts it from 2^64, // this gives unsigned 9223372036854775808 printf("%lld\n", -9223372036854775807ll - 1); // correct way to form signed value -9223372036854775808 }
Ausgabe
123 = 123 0123 = 83 0x123 = 291 12345678901234567890ull = 12345678901234567890 12345678901234567890u = 12345678901234567890 9223372036854775808 -9223372036854775808
[bearbeiten] Referenzen
- C23-Standard (ISO/IEC 9899:2024)
- 6.4.4.1 Ganzzahlkonstanten (S. 57-60)
- C17-Standard (ISO/IEC 9899:2018)
- 6.4.4.1 Ganzzahlkonstanten (S. 45-46)
- C11-Standard (ISO/IEC 9899:2011)
- 6.4.4.1 Ganzzahlkonstanten (S. 62-64)
- C99-Standard (ISO/IEC 9899:1999)
- 6.4.4.1 Ganzzahlkonstanten (S. 54-56)
- C89/C90-Standard (ISO/IEC 9899:1990)
- 3.1.3.2 Ganzzahlkonstanten
[bearbeiten] Siehe auch
| C++ Dokumentation für Ganzzahl-Literal
|