Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Also zumindest x86 hat einen Maschinencodebefehl für Inkrement bzw. Dekrement, also muss ein "i++" nicht irgendwie in i = i + 1 umgewandelt werden
Ansonsten ist der Unterschied zwischen i++ und ++i ja der, daß bei i++ zuerst inkrementiert und dann der neue Wert zurückgegeben wird, bei ++i wird der vorherige Wert zurückgegeben.
int x = i++ entspricht etwa dem hier:
Java:
int temp = i;
++i;
int x = temp;
Wobei temp ja nicht zwingendermaßen als Variable im Speicher existieren muss. Der Compiler kann es in dem Fall einfach runterkürzen auf:
Java:
int x = i;
++i;
Im Allgemeinen sagt man, daß Pre-Inkrement effizienter ist.. aber Compiler sind ansich recht schlau, solche "Fehler" weg zu optimieren. Vor allem wenn man den "Rückgabewert" der Operation nicht verwendet sollte eigentlich in beiden Fällen exakt der gleiche Maschinencode rauskommen.
Spannender ist das eher z.B. bei C++, wenn man mit Klassen arbeitet, die pre- bzw. post-inkrement überladen, wie z.B. iterator-Objekte. Aber ich glaube selbst da optimiert der Compiler alles weg was nicht gebraucht wird.
Ja, hast natürlich Recht, ich habs genau falsch rum aufgeschrieben
Danke für den Hinweis, ich werds mal heimlich korrigieren. Zumindest das Beispiel drunter war ja richtig
[edit]Huh, kann man hier einen älteren Beitrag nicht mehr editieren?
Ne Leute, ihr habt mich nicht richtig verstanden. Ich möchte innerhalb eines Ausdrucks/Terms/Algebras (i+=10) oder (i=i+10)
schreiben,
der VORHERIGE Wert von i soll aber "zurückgegeben"/verwendet werden.
Beispiel:
Java:
int i = 1;
// Schleife
int kompliziert = a * b * c * (i=i+10) / d;
Ich möchte daraus nicht machen:
Java:
int i = 1;
// Schleife
int kompliziert = a * b * c * i / d;
i += 10;
Das wird nicht funktionieren. Der innere Ausdruck wird immer gleich ausgwertet.
Eine Möglichkeit wäre hier vielleicht mit "AtomicInteger" zu arbeiten. Diese Klasse bietet unterschiedliche Methoden an: "addAndGet" bzw. "getAndAdd"
Vielen Dank. Ein einfaches: "Geht nicht!", reicht mir schon.
Ich wollte halt alles in/innerhalb einer Zeile schreiben.
Mit i++ (Erhöhung nur um 1) wäre es gegangen!
"AtomicInteger" hat natürlich etwas Overhead.
Ok, also danke.
Atomics sind aber wieder was anderes. Bei einem i += 10 könnte es theoretisch passieren, daß zwischen der Lese- und der Schreiboperation dir ein anderer Thread dazwischengrätscht und dir was anderes reinschreibt, wodurch du Daten verlieren könntest. Atomics sollen das verhindern, indem sie z.B. Addieren und Lesen zu einer atomaren Funktion "addAndGet" zusammenfassen, ohne daß ein Thread dazwischengrätschen kann. Also eigentlich das Gegenteil von dem was du haben willst
Ist dein Beispiel eigentlich nur ein theoretisches, oder hast du tatsächlich einen praktischen Anwendungsfall dafür? Sonst würde ich empfehlen, die Rechenschritte einfach aufzuteilen. Einen Rechenschritt zu verzögern macht eigentlich wenig Sinn.
(Hm, irgendwie hatte das Forum gerade angefangen mir zu gefallen. Ist irgendwie doof daß man einen Fehler nicht mehr korrigieren kann und jemand der das liest evtl nicht merkt daß es falsch ist)
Ist dein Beispiel eigentlich nur ein theoretisches, oder hast du tatsächlich einen praktischen Anwendungsfall dafür? Sonst würde ich empfehlen, die Rechenschritte einfach aufzuteilen. Einen Rechenschritt zu verzögern macht eigentlich wenig Sinn.
(Hm, irgendwie hatte das Forum gerade angefangen mir zu gefallen. Ist irgendwie doof daß man einen Fehler nicht mehr korrigieren kann und jemand der das liest evtl nicht merkt daß es falsch ist)
Mir fällt es auch an zu gefallen, ich fühle mich hier schon wohl.
Selbstverständlich ist es nicht, das jemand, der hier
vorbeischaut, einen Fehler erkennt. ...
Schreib' einen Mod an!
(Hm, irgendwie hatte das Forum gerade angefangen mir zu gefallen. Ist irgendwie doof daß man einen Fehler nicht mehr korrigieren kann und jemand der das liest evtl nicht merkt daß es falsch ist)
Eine gewisse Zeit lang kannst du eigene Beiträge editieren und nachbessern. (am besten mittels EDIT vermerken )
Ansonsten einfach einen Post hinzufügen und es richtigstellen
Hm, ja.. meine Variante steht ja schon darüber. Im Allgemeinen halt ich nicht sonderlich viel davon, möglichst viel Code in eine Zeile zu packen
War mir aber tatsächlich neu, daß man die Atomics dafür missbrauchen kann. Ich hatte die bisher nur in C++ verwendet, da gibts glaube ich kein getAndSet.
Eine gewisse Zeit lang kannst du eigene Beiträge editieren und nachbessern. (am besten mittels EDIT vermerken )
Ansonsten einfach einen Post hinzufügen und es richtigstellen
Ist tatsächlich das erste Forum in dem ich sehe daß Editieren nur eine gewisse Zeit lang erlaubt ist. Eigentlich ist der Fehler ja schon im Post drutner aufgezeigt, aber im Hinblick auf Leute, die evtl per Google auf das Thema hier stoßen und nur bis zur ersten Antwort lesen wäre es schon nicht verkehrt wenn die nicht gleich nen groben Fehler beinhalten würde
Ich finde es eigentlich ganz gut, dass man nur kurzzeitig editieren kann, denn Korrekturen können dazu führen, dass nachfolgende Posts nicht mehr verständlich sind. Außerdem bekommt man es nicht unbedingt mit, dass sich etwas geändert hat. Einen Korrekturpost sieht man dagegen wieder als neuen Beitrag und nimmt ihn wahr.
...... aber im Hinblick auf Leute, die evtl per Google auf das Thema hier stoßen und nur bis zur ersten Antwort lesen wäre es schon nicht verkehrt wenn die nicht gleich nen groben Fehler beinhalten würde
Hier sage ich eher: Selber Schuld, wenn man nach Lösungen im Internet sucht sollte man sich generell etwas mehr als nur die 1.Antwort durchlesen.
Einerseits kann diese eben Fehler enthalten oder komplett falsch sein, andererseits gibt es vielleicht einfachere bessere/leichtere Variante oder einen komplett anderen Ansatz.
Ansonsten wie Meniskusschaden schon gesagt hat, bestimmte Sachen beziehen sich möglicherweise auf etwas im vorherigen Beitrag und dann würde der Zusammenhang verloren gehen.