C-Programmierung: Datentypen
Grunddatentypen
[Bearbeiten]Typ | Grenz-Konstanten | Mindest-Wertebereich lt. Standard | typischer Wertebereich |
---|---|---|---|
signed char | SCHAR_MIN bis SCHAR_MAX | −127 bis 127 | −128 bis 127 |
signed short | SHRT_MIN bis SHRT_MAX | −32.767 bis 32.767 | −32.768 bis 32.767 |
signed int | INT_MIN bis INT_MAX | −32.767 bis 32.767 | −2.147.483.648 bis 2.147.483.647 |
signed long | LONG_MIN bis LONG_MAX | −2.147.483.647 bis 2.147.483.647 | −2.147.483.648 bis 2.147.483.647 |
signed long long | LLONG_MIN bis LLONG_MAX | −9.223.372.036.854.775.807 bis 9.223.372.036.854.775.807 | −9.223.372.036.854.775.808 bis 9.223.372.036.854.775.807 |
unsigned char | 0 bis UCHAR_MAX | 0 bis 255 | 0 bis 255 |
unsigned short | 0 bis USHRT_MAX | 0 bis 65.535 | 0 bis 65.535 |
unsigned int | 0 bis UINT_MAX | 0 bis 65.535 | 0 bis 4.294.967.295 |
unsigned long | 0 bis ULONG_MAX | 0 bis 4.294.967.295 | 0 bis 4.294.967.295 |
unsigned long long | 0 bis ULLONG_MAX | 0 bis 18.446.744.073.709.551.615 | 0 bis 18.446.744.073.709.551.615 |
float | FLT_MIN bis FLT_MAX | 10−37 bis 1037 | 1.175494351*10−38 bis 3.402823466*1038 |
double | DBL_MIN bis DBL_MAX | 10−37 bis 1037 | 2.2250738585072014*10−308 bis 1.7976931348623158*10308 |
long double | LDBL_MIN bis LDBL_MAX | 10−37 bis 1037 | 3.362103143112093506262677817321752602598*10−4932 bis 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.