C 6: Elementare Datentypen
Um es nochmal klar zu stellen: Eine Ganzzahl kann nur in einer Variable vom Typ Ganzzahl ordentlich gespeichert werden. Eine Kommazahl kann nur in einer Variable vom Typ Kommazahl ordentlich gespeichert werden. Welche Typen es gibt und was mit „ordentlich“ gemeint ist, wird gleich erklärt. Es folgt eine Tabelle der elementaren Datentypen in C:
Name | Formatzeichen | Typ | Größe |
char |
%c |
Einzelnes Zeichen | 1 Bytes, 8 Bit |
short |
%d |
Ganzzahl | 2 Byte, 16 Bit |
int |
%d |
Ganzzahl | 4 Byte, 32 Bit (auf 32 Bit-Systemen) |
long |
%ld |
Ganzzahl | 4 Byte, 32 Bit |
float |
%f |
Gleitpunktzahl (Kommazahl) | 4 Byte, 32 Bit |
double |
%lf |
Gleitpunktzahl (Kommazahl) | 8 Byte, 64 Bit |
long double |
%lf |
Gleitpunktzahl (Kommazahl) | 10 Byte, 80 Bit |
Zu dieser Tabelle gibt es einiges anzumerken. Als erstes bezeichnet die Größe einer Byte- bzw. Bitzahl. Die Größe ist nicht mit dem Wertebereich zu verwechseln. Die Größe eine Variable ist immer gleich, der Wertebereich kann jedoch verändert werden. So kann char
ASCII-Werte von -128 bis +127 enthalten. Stellt man jedoch den Modifier unsigned
vor den Variablentyp (char
), wird die ganze Größe nur für den positiven Wertebereich verwendet – also 0 bis +255. Dieser Wertebereich umfasst immer 256 verschiedene Zahlen (so viele wie man mit 1 Byte/8 Bit eben darstellen kann).
Als nächstes ist anzumerken, dass der Datentyp int
vom PC/Betriebssystem abhängig ist. So ist eine Integer-Variable auf einem 16 Bit-System nur 16 Bit groß, auf einem 64 Bit-System jedoch 64 Bit.
Intern wird jede Variable als Zahl hantiert – das dürfte ja nichts neues sein. Grundsätzlich kann man also jede Variable mit dem Formatzeichen %d
oder %i
ausgeben. Das ergibt jedoch nicht immer Sinn. Ein Beispiel soll Licht in’s Dunkle bringen:
tcr@triton ~ $ cat test.c #include <stdio.h> int main() { char zeichen = 'A'; printf("%d\n", zeichen); printf("%i\n", zeichen); printf("%c\n", zeichen); printf("%f\n", zeichen); printf("%x\n", zeichen); } tcr@triton ~ $ gcc test.c test.c: In function ‘main’: test.c:9: warning: format ‘%f’ expects type ‘double’, but argument 2 has type ‘int’ tcr@triton ~ $ ./a.out 65 65 A 0.000000 41 tcr@triton ~ $ |
Die printf
-Anweisungen muss man jetzt noch nicht verstehen. Wichtig ist das Formatzeichen, welches benutzt wird, und die entsprechende Ausgabe. Eine char
-Variable wird angelegt und mit verschiedenen Formatzeichen ausgegeben. Erwartungsgemäß gibt %c
das aus, was wir eigentlich wollen. Da aber alle Daten PC-intern als Zahlen gespeichert werden, können wir das große a
auch als int
-Wert ausgeben lassen. Ein Blick in die ASCII-Tabelle verrät uns, dass unsere Ausgabe stimmen kann. Denn der Buchstabe A
wird intern als Dezimalzahl 65
bzw. Hexadezimalzahl 41
gehandhabt. Als Gleitpunktzahl macht 'A'
jedoch gar keinen Sinn.
Die wichtigsten Formatzeichen wurden bereits im letzten Artikel aufgelistet. Einfach nochmal nachschauen und etwas ausprobieren. Ich freue mich auf eure Fragen, Probleme und Anregungen.
PS: Die Artikelserie ist bewusst so geschrieben, dass man sie nicht nur durchliest und danach „C programmieren“ kann. Sie basiert auf Eigeninitiative und soll nur einen groben Weg gestalten. Deshalb verzweifelt nicht falls etwas nicht auf Anhieb Sinn ergibt. Fragen sind immer willkommen! 😉