Frage zu ASCII (von (65)-A- nach (66)-B- )



  • Hallo

    Ich habe eine kurze Frage und hoffe, das mir diese jemand beantwortenn kann.

    char ch = 65;
    cout << ch;         
    

    // ergibt: A

    char ch = 65 + 1;
    cout << ch;       
    

    // ergibt: B

    warum dann nicht

    char ch = 65;
    cout << ch + 1 << endl; 
    

    //ergibt: 66 und nicht B

    Ich habe es nicht geschaft meine Frage "richtig" bzw "anders" zu formulieren und hoffe, das man meine Frage trotzdem versteht.

    Edit;

    mit

    char ch = 65;
    cout << ++ch;
    

    Funktionierts.

    Vielen Dank im voraus.



  • In Ausdrücken werden Werte der Ganzzahltypen, die nicht aus mehr Bits als int bestehen, automatisch nach int konvertiert (kurz gefasst). cout << ch + 1 << endl; wird deshalb ein int an operator<< übergeben, während cout << ch; tatsächlich ein char an operator<< gibt und deshalb den Wert als Zeichen ausgibt.
    Mach also einen expliziten Cast: cout << char(ch + 1) << endl;



  • Hallo, Hubert Alfonsius.

    Erst einmal Danke ich dir für die schnelle Antwort.

    Ich hatte es mit einem expliziten Cast versucht, allerdings falsch.
    Und bevor ich hetwas nicht verstehe, mache ich nicht weiter.

    Vielen Dank und grüße.





  • Was swordfish hinter dem Link sagen soll:
    Wenn du arithmetische Ausdrücke mit Ganzzahlen hast, wird das Ergebnis in einen int promoted, wenn es bis dahin etwas kleineres als int ist. Also mychar + 1 ergibt einen int und nicht einen char. Du rechnest hier ja char + int = int. Soweit nicht überraschend, denn der int hat ja mehr Platz als der char. Überraschend ist, dass auch char + char = int gilt.

    Ich habe gestern gerade zufällig das Video von Marshall Clow über "std::midpoint? How Hard Could it Be?" angeguckt. Da kommt genau dieses Problem auch vor. Die Aufgabe, den midpoint von 2 Zahlen zu bestimmen, klingt so einfach, ist es aber dann doch nicht.



  • Hallo

    Vielen Dank für eure Antworten


Log in to reply