Kann man post increment "vollständig schreiben"?

X

Xyz1

Gast
Hallo,
nun ist mir doch was eingefallen,
aus
++i
wird
(i+=1) oder (i=i+1) innerhalb eines Ausdrucks/Terms/Algebras,

wie kann man aber
i++
vollständig schreiben?
 

Baldur

Aktives Mitglied
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.
 

Baldur

Aktives Mitglied
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?
 
X

Xyz1

Gast
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;

Versteht ihr das "Dilemma"?

@Baldur: Edit-time glaube ich 30 Min.
 

Joose

Top Contributor
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"
 
X

Xyz1

Gast
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.
 

Baldur

Aktives Mitglied
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)
 
Zuletzt bearbeitet:
X

Xyz1

Gast
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)

Hier, bitte: http://www.java-forum.org/thema/string-in-int-umwandeln.172206/#post-1084662

Mir fällt es auch an zu gefallen, ich fühle mich hier schon wohl. :D
Selbstverständlich ist es nicht, das jemand, der hier
vorbeischaut, einen Fehler erkennt. ...
Schreib' einen Mod an!
 

Joose

Top Contributor
(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 :)
 

Baldur

Aktives Mitglied
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 ;)
 
Zuletzt bearbeitet von einem Moderator:

Meniskusschaden

Top Contributor
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.
 

Joose

Top Contributor
...... 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.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F POST-Request mit json - Abfrage mit Java Java Basics - Anfänger-Themen 2
K Eigene Annotations, Pre-/Post-/Call-Method Java Basics - Anfänger-Themen 6
B Input/Output HttpURLConnection ( java.net ) Post request Java Basics - Anfänger-Themen 8
N Unterschied von Post- und Preinkrement Java Basics - Anfänger-Themen 3
F Http Post von mehreren Daten Java Basics - Anfänger-Themen 5
N Daten/Formular per POST an Firefox/Browser senden Java Basics - Anfänger-Themen 7
F Get/Post als eigener Thread mit Rückgabe Java Basics - Anfänger-Themen 5
R Daten via Post an php Script senden Java Basics - Anfänger-Themen 1
A ein observer "post"problem Java Basics - Anfänger-Themen 3
J Funktion um JSON per Post senden/emfangen Java Basics - Anfänger-Themen 3
J Html zugriff - POST Request/Response Java Basics - Anfänger-Themen 4
B JavaSkript Form-Tag Value & Post Java Basics - Anfänger-Themen 6
C Versandmarken Post Java Basics - Anfänger-Themen 3
N URLConnection Post Login Java Basics - Anfänger-Themen 8
P Java POST an PHP und lesen Java Basics - Anfänger-Themen 5
G Daten per post Java Basics - Anfänger-Themen 3
hdi Verständnisfrage zu Zuweisung + Post-Inkrement Java Basics - Anfänger-Themen 3
C HTTP POST-Request Java Basics - Anfänger-Themen 3
R von Applet zu html/php und post variablen mitschicken Java Basics - Anfänger-Themen 3
G POST-Daten Java Basics - Anfänger-Themen 5
hdi post/pre inkrement oder dekrement Java Basics - Anfänger-Themen 4
G Post-und Präinkrement Schreibweise Java Basics - Anfänger-Themen 4
V Post-Methode und HTTPClient ? Java Basics - Anfänger-Themen 3
O Post senden an php script. Java Basics - Anfänger-Themen 20
G Post-Methode senden Java Basics - Anfänger-Themen 4
P Increment Java Basics - Anfänger-Themen 9
E Methoden Action Event wird nicht vollständig ausgeführt Java Basics - Anfänger-Themen 3
L Prüfen ob Fax (Tif-Datei) vollständig angekommen ist Java Basics - Anfänger-Themen 15
U Prüfung, ob Datei vollständig vorhanden Java Basics - Anfänger-Themen 8
A Datentypen Stringbuilder vollständig leeren Java Basics - Anfänger-Themen 6
B Segment vollständig befüllen Java Basics - Anfänger-Themen 2
C Ausgabe nicht vollständig Java Basics - Anfänger-Themen 6
R GUI vollständig leeren Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben