anführungszeichen,



  • Guten Abend,

    char ch = '65';
    	cout << ch;
    

    Warum ist hier die Ausgabe 5 ?
    und hier:

    char ch = 65;
    	cout << ch;
    

    A, dass die zahlen umgewandelt werden > asci tabelle 65 = a ist klar, aber wieso bei der ersten nicht, das in einfachen anführungszeichen eingeschlossene zeichen - zeichenliterale sind ist mir auch bewusst,

    Sollte man escape sequenzen in einfachen oder doppelten anführungszeichen angeben: "" - '' weil eig. sind es ja mehr als ein zeichen ? oder zählt das " \ " nicht ?


  • Mod

    Der Unterschied zwischen "1", '1' und 1 ist:

    • Das erste ist eine Zeichenkette, die hier bloß ein einziges Zeichen (die '1') enthält (vor der Nullterminierung), also vom Typ char[2] ist.
    • Das zweite ist ein einzelnes Zeichen, char.
    • Das dritte ist ein Integerliteral, welches (genau wie der char aus dem vorherigen Punkt) implizit in andere Ganzzahltypen (auch char ist ein Ganzzahltyp!) umgewandelt werden kann.

    'ab' ist ein Zeichen mit zwei Zeichen. Diese multi-character Literale sind zwar erlaubt, aber was das genau bedeutet, ist implementierungsabhängig. Sie haben immer Typ int.

    Warum ist hier die Ausgabe 5 ?

    Spekulation: '65' heißt bei deiner Implementierung ein int mit Wert '6'*CHAR_MAX + '5'. Wenn du dies einem char zuweist, bekommt du daher nach den üblichen Regeln für Überläufe gerade wieder die '5'.



  • SeppJ schrieb:

    Spekulation: '65' heißt bei deiner Implementierung ein int mit Wert '6'*CHAR_MAX + '5'.

    '6' * CHAR_MAX haut nicht hin.
    '6' << CHAR_BIT müsste besser hinkommen


  • Mod

    hustbaer schrieb:

    SeppJ schrieb:

    Spekulation: '65' heißt bei deiner Implementierung ein int mit Wert '6'*CHAR_MAX + '5'.

    '6' * CHAR_MAX haut nicht hin.
    '6' << CHAR_BIT müsste besser hinkommen

    Argh. CHAR_MAX ist ja 255/127, nicht 256/128. Denkfehler.



  • Ich versteh gerad die Spekulation nicht... der rest ist gut verständlich.

    warum ist char denn ein ganzzahltyp ?



  • Fragäzeichen schrieb:

    Ich versteh gerad die Spekulation nicht... der rest ist gut verständlich.

    warum ist char denn ein ganzzahltyp ?

    Weil der Computer nur Zahlen speichern kann. Char speichert eben den ASCII-Code deines Zeichens oder die Zahl, die du in ihn reinsteckst. Und bei mehreren Zeichen reicht ein char nicht aus.


Anmelden zum Antworten