|

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...
Dieser eine Byte setzt sich jetzt aus 8 einzelne Bits zusammen..
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!

© 2001,2002 Jürgen Wolf
|