Namespaces
Variants

Integer constant

From cppreference.net

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 0x oder die Zeichenfolge 0X gefolgt 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 0b oder die Zeichenfolge 0B gefolgt 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 u oder das Zeichen U )
  • long-suffix (das Zeichen l oder das Zeichen L ) oder das long-long-suffix (die Zeichenfolge ll oder die Zeichenfolge LL ) (seit C99)
  • bit-precise-int-suffix (die Zeichenfolge wb oder die Zeichenfolge WB ) (seit C23)

Optionale einfache Anführungszeichen ( ' ) können zwischen den Ziffern als Trennzeichen eingefügt werden. Sie werden vom Compiler ignoriert.

(since C23)

Erklärung

1) Dezimale Ganzzahlkonstante (Basis 10, die erste Ziffer ist die höchstwertige).
2) Oktale Ganzzahlkonstante (Basis 8, die erste Ziffer ist die höchstwertige).
3) Hexadezimale Ganzzahlkonstante (Basis 16, die erste Ziffer ist die höchstwertige, die Buchstaben a bis f repräsentieren die Dezimalwerte 10 bis 15).
4) Binäre Ganzzahlkonstante (Basis 2, die erste Ziffer ist die höchstwertige).

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.

Für Ganzzahlkonstanten zulässige Typen
Suffix Dezimalbasen Andere Basen
kein Suffix int

long int
unsigned long int (bis C99)
long long int (seit C99)

int

unsigned int
long int
unsigned long int
long long int (seit C99)
unsigned long long int (seit C99)

u oder U unsigned int

unsigned long int
unsigned long long int (seit C99)

unsigned int

unsigned long int
unsigned long long int (seit C99)

l oder L long int

unsigned long int (bis C99)
long long int (seit C99)

long int

unsigned long int
long long int (seit C99)
unsigned long long int (seit C99)

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