Grundlegende Typen

Aus Appmethod Topics
Wechseln zu: Navigation, Suche

Nach oben zu Deklarationssyntax - Index


Die grundlegenden Typ-Bezeichner werden aus den folgenden Schlüsselwörtern zusammengesetzt:

char

__int8

long

double

__int16

signed

float

__int32

short

int

__int64

unsigned

Mit diesen Schlüsselwörtern können Sie Integer- und Gleitkommazahlen zusammensetzen, die unter dem Oberbegriff "Arithmetische Typen" zusammengefasst werden. Die Modifizierer long, short, signed und unsigned können auf ganzzahlige Datentypen angewandt werden. In der Include-Datei limits.h sind die Wertebereiche für alle grundlegenden Typen definiert.

Integrale Typen

char, short, int und long sowie ihre vorzeichenlosen Varianten werden als ganzzahlige Datentypen bezeichnet. In der folgenden Tabelle finden Sie die Typ-Bezeichner für ganzzahlige Datentypen und ihre in der gleichen Zeile aufgeführten Synonyme.

char, signed char

Synonyme, wenn die Voreinstellung für char auf signed gesetzt ist.

unsigned char

char, unsigned char

Synonyme, wenn die Voreinstellung für char auf unsigned gesetzt ist.

signed char

int, signed int

unsigned, unsigned int

short, short int, signed short int

unsigned short, unsigned short int

long, long int, signed long int

unsigned long, unsigned long int

signed long long, long long int
(ISO C99, C++0x)

unsigned long long, unsigned long long int
(ISO C99, C++0x)

Hinweis: Diese Synonyme gelten nicht in C++. Siehe dazu Die drei char-Typen.

Die Schlüsselwörter signed oder unsigned können nur zusammen mit char, short, int oder long verwendet werden. Wenn Sie die Schlüsselwörter signed und unsigned alleine einsetzen, bedeuten sie signed int bzw. unsigned int.

Ist kein unsigned vorhanden, wird signed für integrale Typen verwendet. Eine Ausnahme besteht für char. Sie können für char sowohl signed als auch unsigned als Voreinstellung definieren. Falls Sie es nicht ändern, ist signed voreingestellt. Ist die Voreinstellung unsigned, wird ch in der Deklaration char ch als unsigned deklariert. Sie müssten mit signed char ch die Voreinstellung überschreiben. Derselbe Fall liegt vor, wenn eine signed-Voreinstellung für char besteht. Sie müssten dann unsigned char ch explizit eingeben, um unsigned char zu deklarieren.

long oder short können nur mit int angegeben werden. Die Schlüsselwörter long und short alleine bedeuten long int und short int.

ANSI C schreibt die Größe oder interne Darstellung dieser Typen nicht vor. Es ist jedoch festgelegt, dass short, int und long nach dem Muster "short <= int <= long" dargestellt werden. Alle drei Typen können identisch sein. Dies ist zu beachten, wenn Sie portierbaren Programmquelltext schreiben möchten, der in anderen Umgebungen laufen soll.

Der Compiler interpretiert die Typen int und long als Äquivalente, da beide 32 Bit groß sind. Die signed-Varianten werden jeweils in den sich ergänzenden Formaten gespeichert und verwenden das MSB (signifikanteste Bit) als Vorzeichen-Bit: 0 für positive und 1 für negative Werte. Dies erklärt die Wertebereiche, die in 32-Bit-Datentypen, Größen und Bereichen verfügbar sind. Bei den vorzeichenlosen Versionen werden alle Bits für einen Bereich von 0 – (2n – 1) verwendet, wobei n gleich 8, 16 oder 32 ist.

Gleitkommatypen

Darstellung und Menge der Werte für die Gleitkommatypen sind implementierungsabhängig; das heißt, sie können von jeder C-Implementierung frei definiert werden. Der Compiler verwendet die IEEE-Gleitkomma-Formate. Weitere Informationen dazu finden Sie in Implementierungsabhängige ANSI-Standards.

float und double sind 32- bzw. 64-Bit-Gleitkommatypen. long zusammen mit double ergibt einen Gleitkommatyp mit einer Genauigkeit von 80 Bit. Zum Beispiel long double test_case.

Informationen über die Speicherreservierung von Gleitkommatypen finden Sie in der Tabelle 32-Bit-Datentypen, Größen und Bereiche.

Arithmetische Standard-Umwandlungen

Wenn Sie einen arithmetischen Ausdruck wie a + b verwenden, wobei a und b zu verschiedenen arithmetischen Typen gehören, führt der Compiler vor der Auswertung des Ausdrucks bestimmte interne Konvertierungen durch. Diese Standardkonvertierungen umfassen auch die Umwandlung von "niederwertigen" Typen in "höherwertige", um Genauigkeit und Konsistenz zu gewährleisten.

Der Compiler führt zur Umwandlung der Operanden eines arithmetischen Ausdrucks folgende Schritte durch:

  1. Alle kleinen Integertypen werden so konvertiert, wie in der Tabelle "Verfahren für arithmetische Standard-Umwandlungen" in Grundlegende Typen dargestellt. Danach sind die zwei mit einem Operator verbundenen Werte entweder int (einschließlich der long- und unsigned-Modifizierer) oder double, float oder long double.
  2. Wenn einer der beiden Operanden vom Typ long double ist, wird der andere in long double konvertiert.
  3. Wenn einer der beiden Operanden vom Typ double ist, wird der andere in double konvertiert.
  4. Wenn einer der beiden Operanden vom Typ float ist, wird der andere in float konvertiert.
  5. Wenn einer der beiden Operanden vom Typ unsigned long ist, wird der andere in unsigned long konvertiert.
  6. Wenn einer der beiden Operanden vom Typ long ist, wird der andere in long konvertiert.
  7. Wenn einer der beiden Operanden vom Typ unsigned ist, wird der andere in unsigned konvertiert.
  8. In allen anderen Fällen sind beide Operanden vom Typ int.

Das Ergebnis des Ausdrucks hat denselben Typ wie die beiden Operanden.

Verfahren für arithmetische Standard-Umwandlungen

Typ Konvertierung in Methode

char

int

Null- oder vorzeichenerweitert (abhängig vom voreingestellten char-Typ)

unsigned char

int

Höherwertiges Byte immer Null

signed char

int

Vorzeichenerweitert (immer)

short

int

Wert unverändert, vorzeichenerweitert

unsigned short

unsigned int

Wert unverändert, nullerweitert

enum

int

Unverändert

Besondere Umwandlungen bei char, int und enum

Hinweis: Die in diesem Abschnitt erläuterten Konvertierungen sind spezifisch für den Compiler Appmethod C++ bcc32.exe.

Wird ein vorzeichenbehaftetes Objekt (zum Beispiel eine Variable) einem Integerobjekt zugewiesen, erfolgt eine automatische Erweiterung des Vorzeichens. Objekte vom Typ signed char erhalten immer eine Erweiterung des Vorzeichens; Objekte vom Typ unsigned char setzen immer das höherwertige Byte auf Null, wenn sie in int konvertiert werden.

Bei der Konvertierung eines längeren Integertyps in einen kürzeren werden die höherwertigen Bits abgeschnitten und die niederwertigen bleiben unverändert. Bei der Konvertierung eines kürzeren Integertyps in einen längeren wird entweder vorzeichenerweitert oder die zusätzlichen Bits des neuen Wertes werden auf Null gesetzt, abhängig davon, ob der kürzere Typ signed oder unsigned ist.

Siehe auch