Namensräume
Varianten
Aktionen

Ganzzahlkonstante

Von cppreference.com
< c‎ | Sprache

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 0x oder die Zeichenfolge 0X, 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 0b oder die Zeichenfolge 0B, 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 u oder das Zeichen U)
  • lang-suffix (das Zeichen l oder das Zeichen L) oder das lang-lang-suffix (die Zeichenfolge ll oder die Zeichenfolge LL)(seit C99)
  • bit-präzise-ganzzahl-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.

(seit C23)

[bearbeiten] 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

[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.

Zulässige Typen für Ganzzahlkonstanten
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 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