Frage zu char Typen



  • freakC++ schrieb:

    Wenn nicht, wie weise ich dann einem char z.B. 45 zu?

    http://www2.fh-augsburg.de/informatik/vorlesungen/c_cplus/tutorial/henkel/Zeichen.html


  • Mod

    long long ist C99, aber auch im Draft für den nächsten Standard.

    Jeder integer Typ ist mindestens genauso groß wie sein Vorgänger, das ist alles was im Standard steht. Außerdem soll(nicht muss) int den nativen Integertypen der Plattform darstellen. Warum das auf 64-bit Plattformen nur selten der Fall ist, weiß ich nicht. Wahrscheinlich ein Zugeständnis an Programmierer die in ihren Programmen fest davon ausgegangen sind, dass int=32bit.

    OT:

    http://www2.fh-augsburg.de/informatik/vorlesungen/c_cplus/tutorial/henkel/Zeichen.html

    void main() und iostream.h in einem Kurs von volkard? Ich glaube die Welt geht gleich unter...



  • volkard schrieb:

    freakC++ schrieb:

    Spielt also heute keine Rolle mehr?

    noch eine kurze ander Frage: ab 32 - Bit OS gilt doch: int == long?

    Vielen Dank
    lg, freakC++

    Nö.
    Ab 64 ist long=64 und int=32

    MSVC ist hier glaube ich anderer Meinung.



  • hustbaer schrieb:

    volkard schrieb:

    Ab 64 ist long=64 und int=32

    MSVC ist hier glaube ich anderer Meinung.

    Mist. Ich verwende MSVC nicht. Wie ist da bei 64-Bit-Builds int und long?



  • Hallo,
    ok, dann habe ich recht bei meiner Vermutung gehabt. sfgd schrieb, dass ich einem char Wert so 45 zuweise: char a = 45. Das ist natrlich nicht ganz richtig, weil hier nicht 45 zugewiesen wird, sondern der ASCII Code und daher ein Zeichen. Darauf wollte ich eigentlich heraus!

    Naja, vielen Dank für eure Hilfe. Dennoch habe ich irgendwie im Kopf, dass int gleich long auf 32 Bit ist. Ich muss nochmal in meinem Buch nachschauen!

    Vielen Dank
    lg, freakC++



  • freakC++ schrieb:

    Hallo,
    ok, dann habe ich recht bei meiner Vermutung gehabt. sfgd schrieb, dass ich einem char Wert so 45 zuweise: char a = 45. Das ist natrlich nicht ganz richtig, weil hier nicht 45 zugewiesen wird, sondern der ASCII Code und daher ein Zeichen. Darauf wollte ich eigentlich heraus!

    Doch, 45 und '-' zugleich, die kannst Du gar nicht trennen, weil sie das selbe sind. Die Trennung ist erfunden.

    char a=45;
    char b=a*2;
    cout<<int(b)<<'\n';//90
    cout<<char(b)<<'\n';//Z
    

    Es steht eine 45 bzw 90 drin. Das Interpretieren als Zeichen ist nur eine Sache der Ein- und Ausgabe.



  • Du rechnest mit char genauso wie mit allen anderen Integertypen

    Beispiel

    int a = 45; //intern: 00000000000000000000000000101101
    char b = 4; //intern: 00101101

    Merkste? da steht genau das selbe drin! Nur halt mit weniger Bits. Das Rechnen läuft damit genau gleich ab (ob jetzt a*=2 oder b*=2 zB. ). Bloß interpretiert der compiler das anders. Während er bei cout<<a; einfach die zahl ausgibt wandelt er bei cout<<b; die zahl in den entsprechenden ascii code um. Intern ist es aber immernoch die Zahl!



  • *edit: so sollte es heißen :>

    int  a = 45; //intern: 00000000000000000000000000101101 
    char b = 45; //intern:                         00101101
    


  • sfgd schrieb:

    Du rechnest mit char genauso wie mit allen anderen Integertypen

    Besser nicht!!

    int main() {
    
       char ch = 100;
       ch += 45;
       std::cout << int(ch) << std::endl;
       return 0;
    }
    

    Sollen wir abstimmen, was da ausgegeben wird?

    Stefan.


  • Mod

    DStefan schrieb:

    sfgd schrieb:

    Du rechnest mit char genauso wie mit allen anderen Integertypen

    Besser nicht!!

    int main() {
    
       char ch = 100;
       ch += 45;
       std::cout << int(ch) << std::endl;
       return 0;
    }
    

    Sollen wir abstimmen, was da ausgegeben wird?

    Schreib ein signed oder unsigned davor und alle sind sich einig. Ist dann ganu wie bei integer erwartet.



  • SeppJ schrieb:

    Schreib ein signed oder unsigned davor und alle sind sich einig. Ist dann ganu wie bei integer erwartet.

    Naja ... mein Punkt war halt der, dass kein signed oder unsigned davor stand. Und dass sfgd vorschlug, man solle mit char genauso rechnen, wie mit anderen int-Typen. Die Ausgabe meines Beispiels wäre aber undefinert.

    BTW: Ist char laut Standard wirklich ein int-Typ? Oder bloß als int-Typ verwendbar bzw. in einen konvertierbar?

    Stefan.



  • Was ist Deine Definition von "int-Typ"?

    Wenn man mit char oder short rechnen will, wird zumindest eine "Promotion" durchgeführt. Das heißt, chars und shorts werden vorher zu int konvertiert, bevor "gerechnet" wird.

    Eine Seite, die auch gerne verlinkt wird, ist diese hier: Integer Types in C and C++.

    Gruß,
    SP


  • Mod

    DStefan schrieb:

    BTW: Ist char laut Standard wirklich ein int-Typ? Oder bloß als int-Typ verwendbar bzw. in einen konvertierbar?

    char ist laut Standard ein int Typ.


  • Administrator

    DStefan schrieb:

    Die Ausgabe meines Beispiels wäre aber undefinert.

    Nicht undefiniert, sondern implementierungsabhängig. Wichtiger unterschied!

    DStefan schrieb:

    BTW: Ist char laut Standard wirklich ein int-Typ? Oder bloß als int-Typ verwendbar bzw. in einen konvertierbar?

    Laut Standard werden bool , wchar_t , char und alle signed und unsigned Integer Typen integral types genannt. Ein Synonym für integral type ist integer type.
    float , double , long double und alle integer types nennt man auch arithmetic types (wichtig für Operationen).

    Grüssli



  • volkard schrieb:

    hustbaer schrieb:

    volkard schrieb:

    Ab 64 ist long=64 und int=32

    MSVC ist hier glaube ich anderer Meinung.

    Mist. Ich verwende MSVC nicht. Wie ist da bei 64-Bit-Builds int und long?

    ist bei 32 und 64 bit builds gleich: int = 32 bit, long = 32 bit, long long = 64 bit


Anmelden zum Antworten