mikrocontroller.net

Forum: PC-Programmierung Ascii: Wann wird mir Variable als Zahl und wann als Zeichen dargestellt?


Autor: xxox (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

main()
{
    char zeichen;

    printf("\nBitte ein Zeichen eingeben: ");
    scanf("%c", &zeichen);

    int ascii = zeichen;

    printf("\n%c hat den dez. ASCII-Code %d", zeichen, ascii);
}

Autor: xxox (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
xxox schrieb:
> Zahl 0

als Zahl 48 meinte ich natürlich

Autor: Peter II (Gast)
Datum:

Bewertung
-3 lesenswert
nicht lesenswert
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.

Autor: ./. (Gast)
Datum:

Bewertung
-2 lesenswert
nicht lesenswert
> 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.

Autor: xxox (Gast)
Datum:

Bewertung
-3 lesenswert
nicht lesenswert
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?

Autor: Jonas Biensack (jibi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Marc Ebmeyer (mahwe)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: restfet (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
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.

Autor: xxox (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
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?

Autor: xxox (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
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?

Autor: Peter II (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
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.

Autor: restfet (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: guest (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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
...

Autor: physiker (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
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.

Autor: Paul Baumann (paul_baumann)
Datum:

Bewertung
-3 lesenswert
nicht lesenswert
Peter II schrieb:
> als 48 kann ich NIE dargestellt werden, weil das zwei Zeichen sind.

Du nicht, da hast Du Recht.

MfG Paul

Autor: Joachim B. (jar)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
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

Autor: Joachim B. (jar)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
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!

Autor: icke (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
xxox schrieb:
> Ich habe leider gerade keinen IDE mit der ich es testen kann.

https://ideone.com/

Autor: xxox (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Joachim B. (jar)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
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

: Bearbeitet durch User
Autor: Murmelchen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Marc E. schrieb:
> 
http://openbook.rheinwerk-verlag.de/c_von_a_bis_z/...

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

Autor: Murmelchen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

vielleicht helfen Dir ja die folgenden Beispiele, den Sachverhalt besser 
zu verstehen.

#include <stdio.h>

int main(void)
{
    char ch;
    int i;
    
    
    ch = 65;        
    ch = ch + 1; 
    ch++;
    printf("ch = %c, entspricht dem ASCII-Wert %d\n\n", ch, ch);
    
    i = 'a';       
    printf("i = %d, entspricht dem ASCII-Zeichen %c\n", i, i);
    
    ch = i + 3;
    printf("ch = %c, entspricht dem ASCII-Wert %d\n", ch, ch);
    if ('a' <= ch && ch <= 'z')
        ch = ch - 'a' + 'A';
    printf("ch = %c, entspricht dem ASCII-Wert %d\n\n", ch, ch);
    
    for (ch = 'A'; ch <= 'Z'; ch++)
        printf("%c ", ch);
    printf("\n");
    
    return 0;
}  

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.