ein Kapitel zurück                                           ein Kapitel weiter

Der char-Variablentyp kann auf zwei (logische) völlig unterschiedliche Arten verwendet werden. Zum einen dient er zur Darstellung von Zeichen wie 'a' , 'A' , 'b' , 'B' , '5' , '7' , '§' '\n' .......... zur Tastatureingabe und Bildschirmausgabe. Seine andere Anwendung kann für die Verarbeitung kleiner Ganzzahlen sein. Wobei man sagen muss das sein Wertebereich ziemlich klein ist. Hier die Übersicht dazu...

Name Größe Wertebereich Formatzeichen
char 1 Byte -128...127 %c

char ist auch der kleinste Darstellbare Datentype in der Programmiersprache C.

Jetzt möchte mal ein bisschen weiter Ausholen. Der Computer ist eigentlich dumm. Er kennt nichts anderes als 0 für Aus und 1 für Ein. Etwa wie ein Lichtschalter den man entweder Ein oder Ausschalten kann.

Ich glaube ich sollte Ihnen das mal etwas genauer Erklären. Also fangen wir an.

Größe von char   1 Byte = 8 Bit
Größe von int   2 Byte = 16 Bit
Größe von long   4 Byte = 32 Bit
Größe von long double   10 Byte = 80 Bit


Wir konzentrieren uns nun auf dem Typen char. Also hat der Typ 'char' 8 verschieden Lichtschalter (8 Bit) die entweder Ein oder Ausgeschaltet werden können. Und jetzt schauen wir uns das genauer an...

Ich bin 1 Byte gross

Dieser eine Byte setzt sich jetzt aus 8 einzelne Bits zusammen..

Ich bin 1 Byte gross
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

Jede dieser 8 Bits die aus der Speichergröße von einem Byte entstehen kann eine bestimmte Zahl anzeigen...

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
128 64 32 16 8 4 2 1

Wenn man jetzt z.B. den Schalter Bit1 auf 1 setzt ist der tatsächliche Wert wirklich 1
Wenn wir jetzt Bit 0 und Bit 1 auf 1 setzen, dann haben wir den Wert 3 usw.
Aber das auch mal wieder genauer...

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
128 64 32 16 8 4 2 1
0 0 1 0 1 1 0 0

Der Dezimalwert dieser Zusammensetzung der einzelnen Bits beträgt 44. Sie brauchen nur die Bits zusammenzählen die gesetzt (1) sind. Das heißt alle Bits auf Einschalten stehen also 1
Wenn wir jetzt auf die ASCII - Code - Tabelle schauen unter dem dezimalen Wert 44, stellen wir fest das 44 für das Kommazeichen ',' steht. Es geht uns bei 'char' nicht um den 'int' Wert, sonderen um das Zeichen das 'char' ausgibt!!

Die ASCII - Code - Tabelle ist eine Tabelle an die sich alle Programmierer der Welt halten müssen. Sie enthält alle Zeichen die der Computer darstellen kann. Wobei die Zeichen 0-31 Steuerzeichen sind die nicht auf dem Bildschirm darstellbar sind. Z.B. ist dies hier .....
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
128 64 32 16 8 4 2 1
0 0 0 1 1 0 1 1

...(27) die (ESC)Escape-Taste.

Nach diesem kleinen Ausflug nun aber wieder zu Thema dieses Kapitels char ein kleines Programm...

/*Download:char1.c*/
#include <stdio.h>

int main()
{
char a = 'A';
char b = 65;
int c = 65;
int d;

printf("a = %c\n",a);
printf("b = %c\n",b); /*Ueberrascht?*/
printf("c = %c\n",c); /*Nochmals :) */

d = a + b + c; /*Rechenbeispiel*/
printf("d = %d\n",d);

d = 'a' + 'A';
printf("d = %d\n",d);

printf("char a = %c und %d\n",a,a);
printf("char b = %c und %d\n",b,b);
printf("int c = %c und %d\n",c,c);
return 0;
}

Kommen wir gleich zur Sache...

char a = 'A';

Wenn sie ein Zeichen an 'char' zuweisen wollen müssen sie es zwischen zwei einzelnen Hochkommatas stellen.
Kommen sie aber nicht auf die Idee folgende Schreibweisen zu verwenden....

char a = "A"; /*falsch, in doppelte Hochkommatas == String
char a = A; /*falsch, Variablenzuweisung*/




char b = 65; /*Schlechter Stil*/

Hier die andere Möglichkeit 'char' einen Wert zuzuweisen. Rein rechnerisch sind '65' und 'A' völlig identisch. Siehe ASCII - Tabelle. Diese Ausgabe bestätigt uns dies...

printf("a = %c\n",a);
printf("b = %c\n",b);


Hier geht es eigentlich nur um die Bildschirmausgabe. Dem Computer ist es egal welche Schreibweise sie dazu benutzen. Für Ihn gibt's weiterhin nur Bits und Bytes. Das heißt wenn sie das Formatzeichen '%d' benutzen geben sie den dezimalen Wert auf dem Bildschirm aus und wenn sie '%c' benutzen geben sie das Zeichen aus...


printf("int c = %c und %d\n",c,c);

Wie sie sehen funktioniert dies auch mit dem Typ 'int'.

Internationale contra nationale Zeichensätze
Der ASCII (American Standard Code for Information Interchange) wurde von US-Ingenieure entwickelt. Zur damaligen Zeit benutzte man als achtes Bit das Paritätsbit und hatte somit nur noch sieben Bits zur Verfügung. Also Platz für 128 Zeichen und Sonderzeichen.

Jetzt fehlte der Platz für westeuropäische und slawische Zeichen (von der Japanischen Schriftart mit über 40.000 Zeichen ganz zu schweigen und der kyrillischen Schriftart). Man beschränkte sich als auf die Zeichen, die man im Englischen benötigte.

Als nun auch die Europäer am Datenverkehr teilnamen war es schon zu spät. Wie sie an der ASCII - Code - Tabelle sehen können befinden sich auf den 128 Zeichen die in 7Bits Platz haben keine Sonderzeichen wie äöüßÄÖÜ.

Nun war die ISO (Internationl Organisation for Standards) gefragt. Der ASCII - Zeichensatz wurde somit auf 8 Bits erweitert und unter der Bezeichnung ISO-8859-1, ISO-8859-2....etabliliert. Der Westeuropäische Standard stellt die ISO-8859-1 da. Damit lassen sich folgende Zeichen dastellen......

/*Download:char2.c*/
#include <stdio.h>

int main()
{
int i;
for(i=0; i>254; i++){
if(i==26)
i++;
printf(" |%d : %c| ",i,i);
}
return 0;
}

Die Deutschen Sonderzeichen in Oktaler Form können sie auch folgendermaßen ausgeben....

/*Download:char3.c*/
#include <stdio.h>

int main()
{
int i;
printf("R\204tsel, \231l, \232berfall\n");
printf("Umlaute Oktal : \204 \216 \224 \231 \201 \232 \341 \n");
return 0;
}

Aufgabe 1:
Was passiert bei der Ausgabe des Beispielprogramms wenn sie denn Wert von 'int c' auf 300 verändern? Was gibt 'c' dann für ein Zeichen aus?

Aufgabe 2:
Was für Zeichen stellt der Computer hier dar? Benutzen sie zur Lösung die ASCII - Code - Tabelle.

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
128 64 32 16 8 4 2 1
0 1 0 0 0 0 0 1

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
128 64 32 16 8 4 2 1
0 1 1 0 0 0 0 1

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
128 64 32 16 8 4 2 1
0 1 1 0 0 0 0 0


Aufgabe 3: Und jetzt umgekehrt. Welche Bitstellungen ergeben sich bei folgenden Zeichen:


'J' 'm' '#'

Hier gibt es die Lösung!

ein Kapitel zurück          nach oben           ein Kapitel weiter


© 2001,2002 Jürgen Wolf