C-Programmierung: Datentypen
Grunddatentypen[Bearbeiten]
Typ | Grenz-Konstanten | Mindest-Wertebereich lt. Standard | typischer Wertebereich |
---|---|---|---|
signed char | SCHAR_MIN - SCHAR_MAX | -127 - 127 | -128 - 127 |
signed short | SHRT_MIN - SHRT_MAX | -32.767 - 32.767 | -32.768 - 32.767 |
signed int | INT_MIN - INT_MAX | -32.767 - 32.767 | -2.147.483.648 - 2.147.483.647 |
signed long | LONG_MIN - LONG_MAX | -2.147.483.647 - 2.147.483.647 | -2.147.483.648 - 2.147.483.647 |
signed long long | LLONG_MIN - LLONG_MAX | -9.223.372.036.854.775.807 - 9.223.372.036.854.775.807 | -9.223.372.036.854.775.808 - 9.223.372.036.854.775.807 |
unsigned char | 0 - UCHAR_MAX | 0 - 255 | 0 - 255 |
unsigned short | 0 - USHRT_MAX | 0 - 65.535 | 0 - 65.535 |
unsigned int | 0 - UINT_MAX | 0 - 65.535 | 0 - 4.294.967.295 |
unsigned long | 0 - ULONG_MAX | 0 - 4.294.967.295 | 0 - 4.294.967.295 |
unsigned long long | 0 - ULLONG_MAX | 0 - 18.446.744.073.709.551.615 | 0 - 18.446.744.073.709.551.615 |
float | FLT_MIN - FLT_MAX | 10-37 - 1037 | 1.175494351*10-38 - 3.402823466*1038 |
double | DBL_MIN - DBL_MAX | 10-37 - 1037 | 2.2250738585072014*10-308 - 1.7976931348623158*10308 |
long double | LDBL_MIN - LDBL_MAX | 10-37 - 1037 | 3.362103143112093506262677817321752602598*10-4932 - 1.189731495357231765021263853030970205169*104932 |
Durch den Standard werden ausschließlich Mindest-Wertebereiche vorgegeben, die vom Compilerhersteller konkret vergeben werden.
Die in der Implementierung tatsächlich verwendeten Größen sind in der Headerdatei <limits.h> und <float.h> definiert.
Auf Maschinen, auf denen negative Zahlen im Zweierkomplement dargestellt werden, erhöht sich der negative Zahlenbereich um eins. Deshalb ist beispielsweise der Wertebereich für den Typ signed char
bei den meisten Implementierungen zwischen -128 und +127.
Eine ganzzahlige Variable wird mit dem Schlüsselwort unsigned
als vorzeichenlos vereinbart, mit dem Schlüsselwort signed
als vorzeichenbehaftet. Fehlt diese Angabe, so ist die Variable vorzeichenbehaftet, beim Datentyp char
ist dies implementierungsabhängig.
Der Typ int
besitzt laut Standard eine "natürliche Größe". Allerdings muss short
kleiner als oder gleich groß wie int
und int
muss kleiner als oder gleich groß wie long
sein.
Der Standard legt fest, dass char
groß genug sein muss, um alle Zeichen aus dem Standardzeichensatz aufnehmen zu können. Wird ein Zeichen gespeichert, so garantiert der Standard, dass char
vorzeichenlos ist.
Mit dem C99-Standard wurde der Typ _Bool
eingeführt. Er kann die Werte 0 (false) und 1 (true) aufnehmen. Wie groß der Typ ist, schreibt der ANSI-Standard nicht vor, ebenso nicht für alle anderen Datentypen außer sizeof(char) == 1(Byte)
,allerdings muss _Bool
groß genug sein, um 0 und 1 zu speichern. Wird ein Wert per "cast" in den Datentyp _Bool
umgewandelt, dann ist das Ergebnis 0, wenn der umzuwandelnde Wert 0 ist, andernfalls ist das Ergebnis 1.
Größe eines Typs ermitteln[Bearbeiten]
Der sizeof
-Operator ermittelt die Größe eines Typs in Bytes. Der Rückgabetyp von sizeof
ist als size_t
definiert.
Für unvollständige Typen (incomplete types), also void (nicht void* !) führt der sizeof Operator zu einer constraint violation, ist also nicht verwendbar.
Außerhalb des Standards verwenden Compiler trotzdem sizeof mit void, beim gcc z.B. sizeof(void) == 1.