Grundlegende Typen
Nach oben zu Deklarationssyntax - Index
Inhaltsverzeichnis
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 |
|
unsigned long long, unsigned long long int |
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:
- 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.
- Wenn einer der beiden Operanden vom Typ long double ist, wird der andere in long double konvertiert.
- Wenn einer der beiden Operanden vom Typ double ist, wird der andere in double konvertiert.
- Wenn einer der beiden Operanden vom Typ float ist, wird der andere in float konvertiert.
- Wenn einer der beiden Operanden vom Typ unsigned long ist, wird der andere in unsigned long konvertiert.
- Wenn einer der beiden Operanden vom Typ long ist, wird der andere in long konvertiert.
- Wenn einer der beiden Operanden vom Typ unsigned ist, wird der andere in unsigned konvertiert.
- 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 C++Builder 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
- __int8, __int16, __int32, __int64, Unsigned __int64, Erweiterte Integertypen
- Tentative Definitionen
- Mögliche Deklarationen
- Externe Deklarationen und Definitionen
- Typ-Kategorien
- Initialisierung
- Deklarationen und Deklaratoren
- Modifizierer von Variablen
- Funktions-Modifizierer
- 64-Bit-Windows-Datentypen im Vergleich zu 32-Bit-Windows-Datentypen