1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

i++ ist nicht das selbe wie i=i++ ?!

  • gringo
  • 6. November 2010 um 16:38
  • Unerledigt
  • gringo
    7
    gringo
    Mitglied
    Reaktionen
    1
    Punkte
    536
    Beiträge
    79
    • 6. November 2010 um 16:38
    • #1

    hallo.

    mir ist heute ein interessantes problem untergekommen und ich kann es mir nicht ganz erklären.

    ich hab heute mit einem kollegen welcher gerade erst angefangen hat java zu programmieren ein bsp gecodet.

    normalerweise erhöhe ich ja eine variable einfach mit i++;

    er hatte in seinem code i=i++; und das liefert ein anderes ergebniss. syntaktisch müsste das doch genauso funktionieren, meiner meinung nach.

    ich habs dann ausprobiert:

    int i=0;
    i++;
    => i = 1;

    int i=0;
    i=i++;
    => i = 0;

    kann mir wer erklären warum das so ist?

    "In fact, you can look at the Web as consisting of two basic forms of knowledge: the database and the joke."
    david weinberger

  • tobias
    8
    tobias
    Mitglied
    Reaktionen
    3
    Punkte
    688
    Beiträge
    136
    • 6. November 2010 um 17:07
    • #2

    "The value of the postfix increment expression is the value of the variable before the new value is stored."
    Java Language Specification, 3rd edition, 15.14.2

  • [fl]Quel`Tos
    12
    [fl]Quel`Tos
    Mitglied
    Reaktionen
    14
    Punkte
    1.384
    Beiträge
    262
    • 6. November 2010 um 17:31
    • #3

    In Kurzform i++ ist eher sowas wie { j = i; i = j + 1; return j; }
    wohingegen ++i sowas ist wie { i = i + 1; return i; }

    Let us be thankful we have commerce. Buy more. Buy more now. Buy. And be happy.

  • Christoph R.
    16
    Christoph R.
    Mitglied
    Reaktionen
    36
    Punkte
    2.626
    Beiträge
    428
    • 6. November 2010 um 17:56
    • #4

    Auch wenn das Ergebnis natürlich in der jeweiligen Sprache ganz genau spezifiziert ist, und ich mal gehört habe dass jemand bei einem Einstellungstest beantworten musste was "a += ++a+a++" macht, ist die einzig sinnvolle Antwort: sowas schreibt man nicht.

    Ich hab es interessehalber mal ausprobiert, und festgestellt dass z.B. C/C++ und Java die Ausdrücke auf unterschiedliche Art und Weise auswerten. Insofern ist es sehr dumm sowas zu schreiben, weil es kaum jemand nachvollziehen kann und sicher irgendwann für Probleme sorgt (ist jetzt keine Kritik an Programmieranfängern, sondern an Personalchefs die glauben es wäre eine wichtige Fähigkeit wenn man sowas weiß).

    Einmal editiert, zuletzt von Christoph R. (6. November 2010 um 18:00) aus folgendem Grund: verschrieben

  • anwesender
    8
    anwesender
    Mitglied
    Reaktionen
    12
    Punkte
    647
    Beiträge
    125
    • 7. November 2010 um 00:12
    • #5
    Zitat von Christoph R.

    Auch wenn das Ergebnis natürlich in der jeweiligen Sprache ganz genau spezifiziert ist, und ich mal gehört habe dass jemand bei einem Einstellungstest beantworten musste was "a += ++a+a++" macht, ist die einzig sinnvolle Antwort: sowas schreibt man nicht.


    Bei "Grundlagen des Programmierens" bei den Maschinenbauern wird so etwas abgeprüft als online-tuwel-test, die richtige antwort bei denen war allerdings mit zahlen zu beantworten, imo ein witz solche fragen! (aber als tuwel online test natürlich kein problem, man könnts ja ausprobieren)

    interessant wär noch ob in dem fall der compiler erkennt das nichts passiert und es gleich wegoptimiert...

    Thomas

  • hakan.aras
    2
    hakan.aras
    Mitglied
    Punkte
    20
    Beiträge
    3
    • 10. November 2010 um 04:14
    • #6

    Ich hab mal von einem Professor gehört, dass der Fall nicht im Standard festgelegt ist und er hat ergänzt, dass mehrdeutige Zeilen wie die einfach vermieden werden sollten.
    Weiß allerdings nicht inwiefern es wahr ist.
    Edit: Da war die Rede von C

    MfG

  • anwesender
    8
    anwesender
    Mitglied
    Reaktionen
    12
    Punkte
    647
    Beiträge
    125
    • 10. November 2010 um 07:49
    • #7
    Zitat von hakan.aras

    Ich hab mal von einem Professor gehört, dass der Fall nicht im Standard festgelegt ist und er hat ergänzt, dass mehrdeutige Zeilen wie die einfach vermieden werden sollten.


    Genau das ist das problem, da aber meistens alle mit dem selben java compiler arbeiten funktioniert blöderweise fast immer gleich...

    in C gibts ja doch ein sammelsurium an compilern die unterschiedlich parsen...

    Thomas

  • Kampi
    27
    Kampi
    Mitglied
    Reaktionen
    193
    Punkte
    7.828
    Beiträge
    1.468
    • 10. November 2010 um 09:44
    • #8
    Zitat von hakan.aras


    Weiß allerdings nicht inwiefern es wahr ist.
    Edit: Da war die Rede von C

    doch doch, das stimmt schon. laut standard ist die auswertungsreihenfolge nur fuer '&&', '||', ',' und '?:' garantiert.

    Willfähriges Mitglied des Fefe-Zeitbinder-Botnets und der Open Source Tea Party.

  • JohnFoo
    20
    JohnFoo
    Mitglied
    Reaktionen
    61
    Punkte
    4.231
    Beiträge
    761
    • 11. November 2010 um 01:46
    • #9
    Zitat von Kampi

    doch doch, das stimmt schon. laut standard ist die auswertungsreihenfolge nur fuer '&&', '||', ',' und '?:' garantiert.


    Was jetzt, für Java oder C? Java ist doch garantiert von links nach rechts.

  • hakan.aras
    2
    hakan.aras
    Mitglied
    Punkte
    20
    Beiträge
    3
    • 11. November 2010 um 05:29
    • #10
    Zitat von JohnFoo

    Was jetzt, für Java oder C? Java ist doch garantiert von links nach rechts.



    Also für '&&', '||' und ',' gilt auch in C es wird von links nach rechts ausgeführt, wobei für '&&' und '||' Lazy Evaluation zu beachten ist.

    a ? b : c

    Und hier is es irgendwie logisch, dass zunächst a ausgeführt werden muss. Sonst wüsste der Rechner doch gar nicht, ob er jetzt b oder c ausführen soll.

    Mit freundlichen Grüßen

  • Ringding
    11
    Ringding
    Mitglied
    Reaktionen
    12
    Punkte
    1.237
    Beiträge
    244
    • 11. November 2010 um 07:24
    • #11
    Zitat von hakan.aras

    a ? b : c

    Und hier is es irgendwie logisch, dass zunächst a ausgeführt werden muss. Sonst wüsste der Rechner doch gar nicht, ob er jetzt b oder c ausführen soll.

    So kann man das auch wieder nicht sagen. Wenn a z.B. “x++” ist, dann weiß er sofort durch Auswerten von x, ob er b oder c nehmen soll, könnte sich aber das Erhöhen von x durchaus noch eine Weile aufsparen. Und es ist sogar durchaus möglich, dass der Compiler durch Analyse des umliegenden Codes erkennen kann, dass x an dieser Stelle immer ==0 oder !=0 ist, dann braucht er nicht einmal das.

  • Kampi
    27
    Kampi
    Mitglied
    Reaktionen
    193
    Punkte
    7.828
    Beiträge
    1.468
    • 11. November 2010 um 09:29
    • #12
    Zitat von JohnFoo

    Was jetzt, für Java oder C? Java ist doch garantiert von links nach rechts.


    nachdem es in dem teil den ich zitiert habe um C geht, war auch meine aussage auf C bezogen. um das gings mir.
    fuer den rest gibts "man operator"

    Willfähriges Mitglied des Fefe-Zeitbinder-Botnets und der Open Source Tea Party.

  • Adok
    20
    Adok
    Mitglied
    Reaktionen
    49
    Punkte
    4.199
    Beiträge
    714
    • 21. November 2010 um 19:24
    • #13

    Zu diesem Thema siehe auch: http://www.angelikalanger.com/Articles/VSJ/S…encePoints.html

  • Maximilian Rupp 27. Dezember 2024 um 00:26

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Benutzer online in diesem Thema

  • 2 Besucher

Rechtliches

Impressum

Datenschutzerklärung