Programmieren in C

Datentypen – Speicherbedarf und Typumwandlung

Du möchtest die Datentypen in C genauer kennenlernen? Im folgenden Beitrag zeigen wir die vier wichtigsten Datentypen, die es in C gibt.

Speicherverhalten, Wertebereich und Datentypen C

Um die einzelnen Datentypen besser verstehen zu können, beschäftigen wir uns zunächst mit dem Speicherverhalten der Typen. Jede Variable, die du deklarierst, bekommt vom Compiler einen Speicherbereich zugeordnet. Das tut er, indem er die Adresse der ersten Speicherzelle des Bereiches vorgibt. Die Größe des zugeteilten Speicherbereichs ist abhängig von der Art der Variablen. Genauso verhält es sich auch mit dem Wertebereich. Darunter versteht man die Werte, die in diesem Bereich gespeichert werden dürfen.

Datentypen C
Speicherverhalten

Außerdem legt der Typ der Variable auch noch fest, wie die Binärcodierung erfolgt. Das heißt für uns, dass wir – egal welchen Typ wir wählen – nur einen endlichen Wertebereich zur Verfügung haben. Die genauen Werte für diese Abhängigkeiten sind allerdings systemabhängig.

Solltest du auf die Idee kommen, diese Einschränkungen zu ignorieren, kannst du dich außerdem auf Rechen- und/oder Programmfehler freuen.

C int und float C

Gehen wir deshalb doch mal die verschiedenen Typen durch. Der erste ist der int-Typ. Diese Datentypen sind 4 Byte groß und können eine von 2^32 Zahlen darstellen. Die Bibliothek heißt limits.h und gibt an, welche Zahlen zur Auswahl stehen.

C int; float C
int und float

Der zweite Typ heißt float. Er hat dieselbe Größe wie int und es gibt dieselbe Menge an Optionen für die Darstellung von Zahlen. Allerdings sind die Optionen selbst andere. Einige sind sogar nur exklusiv für den Fehlercode verfügbar! Daher wird für diesen Typen die Bibliothek float.h verwendet. Das besondere bei diesem Typ ist allerdings die Möglichkeit, nicht verfügbare Zahlen auf verfügbare runden zu lassen.

double C und char C

Als nächstes haben wir noch den Typ Double im Angebot. Er ist 8 Byte groß und erlaubt die Darstellung ganzer 2^64 Zahlen. Damit bietet er eine genauere Rundungsoption als float. Dennoch verwendet er die gleiche Bibliothek.

double C; char C
double und char

Kommen wir zum letzten Typ: Dieser ist der char Typ. Er ist nur 1 Byte groß und ist damit sehr kompakt. Er kann zwar nur 2^8 verschiedene Zahlen darstellen, dafür werden diese aber als Zeichen angezeigt. Dabei sind die Optionen 0 bis 127 international und die Optionen 128 bis 255 lokalisiert, um in jedem Land die beste Auswahl zu gewährleisten. Die Bibliothek heißt limits.h.

 

Umwandlung der Datentypen C

Du hast dich jetzt für einen Datentyp entschieden. Nach einer Weile bist du aber unzufrieden und möchtest gerne die dargestellte Zahl in eine Zahl ändern, die in der Anleitung nicht unterstützt wird. Hier kommt jetzt die automatische Typumwandlung ins Spiel, denn sie übernimmt das ganze Drumherum für dich. Willst du zum Beispiel eine 66.6 vom Typ int darstellen lassen, wird daraus automatisch 66 und damit eine unterstützte Option.

Dir ist vielleicht aufgefallen, dass hier nicht gerundet, sondern nur die ungültige Stelle abgeschnitten wurde. Das ist das Standardverhalten in C und passiert genauso, wenn du einen float oder double Wert mit int darstellen lassen willst. Solltest du runden wollen, musst du die Bibliotheksfunktion dafür nutzen oder selbst eine solche anlegen. Solltest du dich aber für einen double entscheiden und einen int-Wert darauf stehen haben, so werden die entsprechenden Nachkommastellen einfach aufgefüllt. Das mag zwar Dinge, wie z.B. wissenschaftliche Ergebnisse verfälschen, jedoch macht es vieles andere einfacher.

C cast

Genauso funktioniert das Ganze mit allen hier angesprochenen Typen. Du kannst eine solche Umwandlung aber auch bewusst herbeiführen, indem du eine sogenannte Cast-Anweisung verwendest. Das macht man meist bei Typeinschränkungen, also wenn Genauigkeit verloren geht. Eine Cast-Anweisung sieht zum Beispiel so aus:

int\ x = (int) 'c';

C cast
Typumwandlung

Und nun kommt die unvermeidliche Ausnahme zu diesen Regeln: In Ausdrücken werden Werte immer in den höchsten Typen, der in dieser Hierarchie vertreten ist, umgewandelt. Diese Regelung werfen char und float allerdings gleich wieder aus dem Fenster, denn für Bewertungen und Berechnungen werden float-Werte in double-Werte umgewandelt und char-Werte in int-Werte. Solltest du allerdings || oder && verwenden, so findet keine Typerweiterung statt, sondern eine Einschränkung, die alle Werte auf 0 und 1 reduziert.

Hallo, leider nutzt du einen AdBlocker.

Auf Studyflix bieten wir dir kostenlos hochwertige Bildung an. Dies können wir nur durch die Unterstützung unserer Werbepartner tun.

Schalte bitte deinen Adblocker für Studyflix aus oder füge uns zu deinen Ausnahmen hinzu. Das tut dir nicht weh und hilft uns weiter.

Danke!
Dein Studyflix-Team

Wenn du nicht weißt, wie du deinen Adblocker deaktivierst oder Studyflix zu den Ausnahmen hinzufügst, findest du hier eine kurze Anleitung. Bitte lade anschließend die Seite neu.