1. Weiterleitung zu NetzLiving.de
  2. Forum
    1. Unerledigte Themen
  3. zum neuen Forum
  • Anmelden
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • 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
Hallo zusammen,

das Informatik-Forum geht in den Archivmodus, genaue Informationen kann man der entsprechenden Ankündigung entnehmen. Als Dankeschön für die Treue bekommt man von uns einen Gutscheincode (informatikforum30) womit man bei netzliving.de 30% auf das erste Jahr sparen kann. (Genaue Infos sind ebenfalls in der Ankündigung)

Vielen Dank für die Treue und das Verständnis!
  • gringo
    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?

  • tobias
    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
    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; }

  • Christoph R.
    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
    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
    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
    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
    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.

  • JohnFoo
    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
    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
    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
    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"

  • Adok
    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.

  1. Datenschutzerklärung
  2. Impressum