Integer constant
Ermöglicht die direkte Verwendung von Werten des Integer-Typs in Ausdrücken.
Inhaltsverzeichnis |
Syntax
Eine ganzzahlige Konstante ist ein Nicht-Lvalue Ausdruck der Form
| decimal-constant integer-suffix (optional) | (1) | ||||||||
| octal-constant integer-suffix (optional) | (2) | ||||||||
| hex-constant integer-suffix (optional) | (3) | ||||||||
| binary-constant integer-suffix (optional) | (4) | (seit C23) | |||||||
wo
-
decimal-constant
ist eine Dezimalziffer ungleich Null (
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) -
octal-constant
ist die Ziffer Null (
0) gefolgt von null oder mehr Oktalziffern (0,1,2,3,4,5,6,7) -
hex-constant
ist die Zeichenfolge
0xoder die Zeichenfolge0Xgefolgt von einer oder mehr Hexadezimalziffern (0,1,2,3,4,5,6,7,8,9,a,A,b,B,c,C,d,D,e,E,f,F) -
binary-constant
ist die Zeichenfolge
0boder die Zeichenfolge0Bgefolgt von einer oder mehr Binärziffern (0,1) - integer-suffix , falls angegeben, kann eines der folgenden enthalten (außer dass das unsigned-Präfix mit einem der anderen kombiniert werden kann; wenn zwei Suffixe verwendet werden, können sie in beliebiger Reihenfolge erscheinen):
-
-
unsigned-suffix
(das Zeichen
uoder das ZeichenU) -
long-suffix
(das Zeichen
loder das ZeichenL) oder das long-long-suffix (die Zeichenfolgelloder die ZeichenfolgeLL) (seit C99) -
bit-precise-int-suffix
(die Zeichenfolge
wboder die ZeichenfolgeWB) (seit C23)
-
unsigned-suffix
(das Zeichen
|
Optionale einfache Anführungszeichen (
|
(since C23) |
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
Der Typ der ganzzahligen Konstante
Der Typ der ganzzahligen Konstante ist der erste Typ, in den der Wert passt, aus der Liste der Typen, die davon abhängt, welche numerische Basis und welches integer-suffix verwendet wurde.
| 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 ganzzahligen Konstante zu groß ist, um in einen der durch Suffix/Basis-Kombination erlaubten Typen zu passen,
sie keine Suffixe
wb
,
WB
,
uwb
, oder
UWB
besitzt
(seit C23)
und der Compiler erweiterte Ganzzahltypen unterstützt (wie
__int128
), kann der Konstante der erweiterte Ganzzahltyp zugewiesen werden; andernfalls ist das Programm fehlerhaft.
Hinweise
Die Buchstaben in den ganzzahligen Konstanten sind unabhängig von der Groß-/Kleinschreibung:
0xDeAdBaBeU
und
0XdeadBABEu
repräsentieren dieselbe Zahl
(eine Ausnahme ist das
long-long-suffix
, welches entweder
ll
oder
LL
ist, niemals
lL
oder
Ll
)
(seit C99)
.
Es gibt keine negativen ganzzahligen Konstanten. Ausdrücke wie - 1 wenden den unären Minus-Operator auf den durch die Konstante repräsentierten Wert an.
|
Wenn sie in einem kontrollierenden Ausdruck von #if oder #elif verwendet werden, verhalten sich alle vorzeichenbehafteten Integer-Konstanten so, als hätten sie den Typ intmax_t und alle vorzeichenlosen Integer-Konstanten verhalten sich so, als hätten sie den Typ uintmax_t . |
(seit C99) |
Integer-Konstanten können in Integer-Konstantenausdrücken verwendet werden.
Aufgrund von
Maximal Munch
müssen hexadezimale Ganzzahlkonstanten, die auf
e
oder
E
enden, wenn sie von den Operatoren
+
oder
-
gefolgt werden, im Quellcode durch Leerzeichen oder Klammern vom Operator getrennt werden:
int x = 0xE+2; // Fehler int y = 0xa+2; // OK int z = 0xE +2; // OK int q = (0xE)+2; // OK
Andernfalls wird ein einzelner ungültiger Präprozessor-Zahl-Token gebildet, was dazu führt, dass die weitere Analyse fehlschlägt.
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); // der Typ ist ein 64-Bit-Typ (unsigned long long oder möglicherweise unsigned long) // selbst ohne long-Suffix printf("12345678901234567890u = %"PRIu64"\n", 12345678901234567890u ); // printf("%lld\n", -9223372036854775808); // Fehler: // der Wert 9223372036854775808 passt nicht in signed long long, welches // der größte Typ für dezimale Integer-Konstanten ohne Suffix ist printf("%llu\n", -9223372036854775808ull ); // unäres Minus angewendet auf einen vorzeichenlosen Wert subtrahiert ihn von 2^64, // dies ergibt den vorzeichenlosen Wert 9223372036854775808 printf("%lld\n", -9223372036854775807ll - 1); // korrekte Methode zur Bildung des vorzeichenbehafteten Werts -9223372036854775808 }
Ausgabe:
123 = 123 0123 = 83 0x123 = 291 12345678901234567890ull = 12345678901234567890 12345678901234567890u = 12345678901234567890 9223372036854775808 -9223372036854775808
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 Integer constants (S. 45-46)
- C11-Standard (ISO/IEC 9899:2011):
-
- 6.4.4.1 Ganzzahlige Konstanten (S: 62-64)
- C99-Standard (ISO/IEC 9899:1999):
-
- 6.4.4.1 Ganzzahlige Konstanten (S: 54-56)
- C89/C90 Standard (ISO/IEC 9899:1990):
-
- 3.1.3.2 Ganzzahlkonstanten
Siehe auch
|
C++ Dokumentation
für
Integer literal
|