News Ticker

C 6: Elementare Datentypen

In dem letzten Artikel wurde erklärt, wie man Daten formatiert einlesen kann. Dies ist natürlich sehr praktisch. Genauso praktisch wie Daten formatiert ausgeben zu können. Doch bevor wir uns tiefer hinein in die Weiten der Ein- und Ausgabefunktionen begeben, ist es vielleicht ganz angebracht auch etwas über Datentypen zu lernen. Das ist logisch wenn man weiß, dass in C Daten nur in eine kompatible Variable eingelesen werden können. Mehr dazu in dem heutigen Artikel.

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! 😉