C-Programmierung: Datentypen

Grunddatentypen Bearbeiten

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