C-Programmierung: Datentypen
Aus Wikibooks
Inhaltsverzeichnis |
[Bearbeiten] Grunddatentypen
[Bearbeiten] Ganzzahlen
| Typ | Vorzeichenbehaftet | Vorzeichenlos |
|---|---|---|
| char | -128 bis 127 | 0 bis 255 |
| short int | -32.768 bis 32.767 | 0 bis 65.535 |
| long int | -2.147.483.648 bis 2.147.483.647 | 0 bis 4.294.967.295 |
| long long int | -9.223.372.036.854.775.808 bis 9.223.372.036.854.775.807 | 0 bis 18.446.744.073.709.551.615 |
Alle angegeben Werte sind Mindestgrößen. Die in der Implementierung tatsächlich verwendeten Größen sind in der Headerdatei limits.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 oder gleich groß wie int und int muss kleiner 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, 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.
[Bearbeiten] Fließkommazahlen
Die von der Implementierung verwendeten Zahlen sind in der Headerdatei <float.h> definiert.
[Bearbeiten] Größe eines Typs ermitteln
Die Größe eines Typs auf einem System wird mit dem sizeof-Operator ermittelt. Siehe Referenzkapitel Operatoren. sizeof typ gibt aber nicht, wie oft vermutet, die Größe einer Variable dieses Typs in Bytes zurück, sondern nur, um welchen Faktor eine solche Variable größer als eine byte-Variable ist. Da jedoch byte auf den meisten Implementierungen ein Byte belegt, stimmen diese Werte meistens überein.