Hallo,
ich verstehe nicht wirklich wann mir das Zeichen '0' als 0 angezeigt
wird und wann als 48 (nach ASCII)?
Ich habe leider gerade keinen IDE mit der ich es testen kann.
Daher folgendes Beispielprogramm:
Wird die Null bei einem Integer immer als Zahl 0 ausgegeben und bei
einem Char als Zeichen 0 ?
Wenn ja, wieso ist das so?
1
main()
2
{
3
charzeichen;
4
5
printf("\nBitte ein Zeichen eingeben: ");
6
scanf("%c",&zeichen);
7
8
intascii=zeichen;
9
10
printf("\n%c hat den dez. ASCII-Code %d",zeichen,ascii);
xxox schrieb:> ich verstehe nicht wirklich wann mir das Zeichen '0' als 0 angezeigt> wird und wann als 48 (nach ASCII)?
als 48 kann ich NIE dargestellt werden, weil das zwei Zeichen sind.
> Ich habe leider gerade keinen IDE mit der ich es testen kann.
Heisst das Fach "Experimentelles Programmieren"?
Wie waers mal mit einem Buch?
Tipp: Das Telefonbuch ist nicht gemeint.
Peter II schrieb:> als 48 kann ich NIE dargestellt werden, weil das zwei Zeichen sind.
Wieso entspricht nach Ascii die 48 dann dem Zeichen Null? Diese
Kodierung muss doch irgendwo Anwendung finden?
char kann (meistens) den Wertebereich von 0-255 annehmen.
Dieser Vorrat reicht gut aus um jeden Buchstaben und noch ein paar
zusätzliche Zeichen im Alphabet eine entsprechenden Vertretter
zuzuweisen.
So ist dem großen 'A' zum Beispiel der Dezimalwert 65 zugeorndet, dem
kleinen 'c' der Dezimalwert 99.
http://www.torsten-horn.de/techdocs/ascii.htm
Wann welche Interpretation angewand wird entscheidet, der Datentyp und
bestimmt Zeichen in der Syntax.
char a = 5; //Zuweisung der Zahl 5
char a = '5'; //Zuweisung der Zahl 53 (siehe tabelle)
Gruß J
xxox schrieb:> Peter II schrieb:> als 48 kann ich NIE dargestellt werden, weil das zwei Zeichen sind.>> Wieso entspricht nach Ascii die 48 dann dem Zeichen Null? Diese> Kodierung muss doch irgendwo Anwendung finden?
Weil es so festgelegt wurde. Und ASCII ist weitverbreitet..
Ob in der Konsole das Zeichen '0' oder die Zahl 48 angezeigt wird, hängt
vom Platzhalter im printf-String ab. Bei %c wird 0 angezeigt, bei %d
(und anderen) die Zahl 48.
Jonas B. schrieb:> char a = 5; //Zuweisung der Zahl 5> char a = '5'; //Zuweisung der Zahl 53 (siehe tabelle)
Danke das hier habe ich gesucht.
Aber noch eine Frage, wie kann ich ein Zeichen ausgeben?
char zeichen = 'A';
printf("\n%c, zeichen);
Wird mir jetzt ein A oder die zugehörige Zahl ausgegeben?
Hat mir bitte jemand ein Beispiel, bei dem A als Zeichen und bei dem A
als Zahl (nach ASCII) ausgegeben wird?
restfet schrieb:> Bei %c wird 0 angezeigt, bei %d> (und anderen) die Zahl 48.
ok, das ist schon die antwort auf meine gerade gestellte Frage.
Aber ich verstehe noch nicht wirklich warum es bei einem Char als
Zeichen dargestellt wird und bei einem Integer als 48?
Der einzige Unterschied zwischen diesen Datentypen ist doch der
Wertebereich, der bei Integer größer ist. Liegt es daran, dass ich mit
meinem einen Byte vom Integer nur ein Zeichen darstellen kann, also die
0 und mit Integer kann ich zwei darstellen, also die 48?
xxox schrieb:> Aber ich verstehe noch nicht wirklich warum es bei einem Char als> Zeichen dargestellt wird und bei einem Integer als 48?
ein char ist auch nur ein integer mit 8 bit.
xxox schrieb:> restfet schrieb:> Bei %c wird 0 angezeigt, bei %d> (und anderen) die Zahl 48.>> ok, das ist schon die antwort auf meine gerade gestellte Frage.>> Aber ich verstehe noch nicht wirklich warum es bei einem Char als> Zeichen dargestellt wird und bei einem Integer als 48?>> Der einzige Unterschied zwischen diesen Datentypen ist doch der> Wertebereich, der bei Integer größer ist. Liegt es daran, dass ich mit> meinem einen Byte vom Integer nur ein Zeichen darstellen kann, also die> 0 und mit Integer kann ich zwei darstellen, also die 48?
Nein, mit dem %c oder %d wird nur die Darstellung durch die Funktion
printf festgelegt.
Such mal printf bei Google, vielleicht werden dir dann das mit den
Formatierungsoptionen klarer.
xxox schrieb:> Aber ich verstehe noch nicht wirklich warum es bei einem Char als> Zeichen dargestellt wird und bei einem Integer als 48?
Dem ist auch nicht so.
Die Darstellung liegt nur an %c bzw %d im Format-String der
printf-Funktion:
%c - Darstellung als Char
%d - Dezimale Darstellung
%x - hexadezimale Darstellung
...
xxox schrieb:> Aber ich verstehe noch nicht wirklich warum es bei einem Char als> Zeichen dargestellt wird und bei einem Integer als 48?
Woher soll der Compiler sonst wissen, als was Du die Bitfolge an der
Stelle interpretiert haben möchtest? Es gibt halt eine
Standardinterpretation per Datentyp und wenn Du es anders haben
möchtest, musst Du es halt angeben.
xxox schrieb:> Wieso entspricht nach Ascii die 48 dann dem Zeichen Null? Diese> Kodierung muss doch irgendwo Anwendung finden?
rate mal was ASCII heisst?
google wird dir verraten
xxox schrieb:> Der einzige Unterschied zwischen diesen Datentypen ist doch der> Wertebereich, der bei Integer größer ist.
ist er denn das?
wieso gibt es wohl die Datentypen
int8_t
int16_t
int32_t
int64_t
sowie die uint Typen?
int selbst sagt doch nichts über die Größe aus!
Joachim B. schrieb:> int selbst sagt doch nichts über die Größe aus!
Was sagt int dann aus? Bzw. was ist dann der Unterschied zwischen int
und char?
Habe es so gelernt, dass char 1 Byte hat und int 2 oder 4 Byte hat.
xxox schrieb:> Habe es so gelernt, dass char 1 Byte hat und int 2 oder 4 Byte hat.
das ist aber überholt seit es QWORDS 64-bit = 8 Bytes gibt.
Mit einem Byte kann man auch nicht alle Zeichensätze bedienen, lese dich
mal in UTF ein
https://de.wikipedia.org/wiki/Unicode_Transformation_Format
Marc E. schrieb:> http://openbook.rheinwerk-verlag.de/c_von_a_bis_z/007_c_typumwandlung_001.htm#mjed1ca17e7a896801712e6998db8be66b
Gerade die Werke von Herrn Jürgen Wolf werden zumindest von denjenigen,
die sich etwas besser mit der Thematik auskennen, als nicht so
empfehlenswert angesehen, da sie oft viel zu viele Fehler enthalten. Und
mit Fehler sind dabei nicht etwa Flüchtigkeitsfehler und dergleichen
gemeint, sondern es werden zu oft Aussagen getroffen, die schlicht nicht
zutreffen und die vermuten lassen, dass es dem Autor an einem tiefer
gehenden Verständnis und Kenntnissen mangelt.
Mit besten Grüßen
Murmelchen
Hallo,
vielleicht helfen Dir ja die folgenden Beispiele, den Sachverhalt besser
zu verstehen.
1
#include<stdio.h>
2
3
intmain(void)
4
{
5
charch;
6
inti;
7
8
9
ch=65;
10
ch=ch+1;
11
ch++;
12
printf("ch = %c, entspricht dem ASCII-Wert %d\n\n",ch,ch);
13
14
i='a';
15
printf("i = %d, entspricht dem ASCII-Zeichen %c\n",i,i);
16
17
ch=i+3;
18
printf("ch = %c, entspricht dem ASCII-Wert %d\n",ch,ch);
19
if('a'<=ch&&ch<='z')
20
ch=ch-'a'+'A';
21
printf("ch = %c, entspricht dem ASCII-Wert %d\n\n",ch,ch);
22
23
for(ch='A';ch<='Z';ch++)
24
printf("%c ",ch);
25
printf("\n");
26
27
return0;
28
}
Will man allerdings wirklich portable Programme schreiben, sollte man
auf Zuweisungen der den ASCII-Werten entsprechenden numerischen Werte
verzichten und und ausschließlich die gewünschten Zeichen (in einfachen
Anführungszeichen) verwenden. Erhöht zudem die Lesbarkeit des
Quelltextes.
Also nicht char ch = 65, sondern char ch = 'A'
Und char ch = 5 ergibt auch nicht das Zeichen '5', sondern im ASCII-Code
das nicht druckbare Steuerzeichen ENQ, welches für Enquiry bzw. Anfrage
(bei einer Fernscheibverbindung) steht. Die Antwort darauf lautet
übrigens ACK (ASCII-Code 6).
Mit besten Grüßen
Murmelchen