Logelei (j++)



  • Zustimmt marci ----! 🕶



  • int a=1;
    int b=2;
    int c=a + ++ b;

    welchen Wert haben a und b?

    Kleiner Tipp:
    mit prioritäten hat das nix zu tun...



  • @Shade

    Um deine Frage zu beantworten es kommt auf die genaue schreibweise an!
    c=a+++b; ->
    a=2 b=2 c=3,
    denn a++ bedeutet das a erst nach der restlichen Operation Incrementiert wird. Es wird also gerechnet c=a+b; a++;

    c=a+ ++b;
    a=1 b=3 c=4,
    denn es wird gerechnet b+1; und dann (a+b) und wenn das nichts mit prioritäten zu tun hat hmmmm`?

    Prioritäten:
    In diesem Punkt möchte ich mich gerne Streiten mit dir denn der Compiler wertet diese Zeichenfolge für sich aus.
    Hierauf folgt, das +++ ein dreifaches Plus erst als Increment und dann als mathematische Plusoperation gelesen wird. Da das Increment aber als Post(Operation) angefügt ist wird diese erst nach der eigentlichen Berechnung also a + b ausgeführt und hat somit keinen Einfluss auf das Ergebnis von c.
    😮

    [ Dieser Beitrag wurde am 16.05.2003 um 14:21 Uhr von DaDaywalker editiert. ]



  • Sckøøl Danke und zustimm Schøøl



  • Original erstellt von DaDaywalker:
    Um deine Frage zu beantworten es kommt auf die genaue schreibweise an!

    exakt!



  • Kleine Denkaufgabe (aber auch nicht so wild):
    Was würde mit den Initialisierungen von "a=1;" und "b=2;" bei c=a----b herauskommen? 😉



  • [ Dieser Beitrag wurde am 16.05.2003 um 21:56 Uhr von volkard editiert. ]



  • Original erstellt von RTC:
    Kleine Denkaufgabe (aber auch nicht so wild):
    Was würde mit den Initialisierungen von "a=1;" und "b=2;" bei c=a----b herauskommen? 😉

    einen syntaxfehler.
    naja der kompiler macht das ganze zu:
    c=(a--)-- b;
    weil posdektrement den höchsten rang hat.
    und dann ist:
    1. a-- keine lvalue d.h. der zweite -- ist illegal
    2. steht das b einfach in der landschaft und es fehlt ein operator davor.

    [ Dieser Beitrag wurde am 16.05.2003 um 22:14 Uhr von japro editiert. ]



  • Original erstellt von japro:
    **
    naja der kompiler macht das ganze zu:
    c=(a--)-- b;
    **

    Hast natürlich recht. Eigentlich wollte ich schreiben:

    c=a--- -b;
    

    was ja dann geht! c= a-- - --b; ist auch ganz nett...



  • Original erstellt von japro:
    [quote]Original erstellt von RTC:
    [qb]Kleine Denkaufgabe (aber auch nicht so wild):
    Was würde mit den Initialisierungen von "a=1;" und "b=2;" bei c=a----b herauskommen? 😉

    einen syntaxfehler.
    naja der kompiler macht das ganze zu:
    c=(a--)-- b;
    weil posdektrement den höchsten rang hat.[/QB][/QUOTE]

    Richtiges Ergebnis, falsche Begründung. Zu dem Zeitpunkt, wo der Quelltext in Präprozessor-Tokens übersetzt wird, hat die Rangfolge der Operatoren noch keinerlei Bedeutung. Der Standard sagt einfach aus:
    "If the input stream has been parsed into preprocessing tokens up to a given character, the next preprocessing token is the longest sequence of characters that could constitute a preprocessing token." (ISO/IEC 9899:1999, 6.4-3)
    Diese werden dann 1-zu-1 in Token umgewandelt:
    "Each preprocessing token is converted into a token. The resulting tokens are syntactically and semantically analyzed and translated as a translation unit." (ISO/IEC 9899:1999, 5.1.1.2-7)
    Der Übersetzer erstellt also folgende Tokenfolge:
    c = a -- -- b
    was ein Syntaxfehler ist.



  • also mein kompiler (gcc) hat gefunden es fehle ihm ein lvalue 🙂



  • @japro: bei "c=a--- -b;" ??? Also bei mir und mit dem gcc hat's geklappt 🙄



  • Original erstellt von RTC:
    @japro: bei "c=a--- -b;" ??? Also bei mir und mit dem gcc hat's geklappt 🙄

    ich hab mich auch auf c=a----b bezogen ohne abstand


Anmelden zum Antworten