C-Programmierung: Datentypen

Aus Wikibooks
Wechseln zu: Navigation, Suche

Grunddatentypen[Bearbeiten]

Grafische Darstellung der Datentypen in C
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.