Anfänger
-
es bleibt a = ...
nur musst du die Bs aendern, also mal "b", dann wieder "b++" und dann auch mal "++b".bitte gehe auf meinen ersten post ein.
-
a = b++ + b++
a = ++b + b++
a = b + ++b
-
kommt denn raus, was rauskommen soll?
b soll von 4 auf 5 gehen, also darf nur einmal ++ vorkommen.
dein drittes ist also schon mal richtig. kannst du auch erklaeren, welchen wert dann a und b haben?
-
hauptsache ihr einigt euch auf einen compiler. ein anderer könnte was anderes ausspucken
-
a = b++ + b++ a=8 b=6
a = ++b + b++ a=9 b=6
a = b + ++b a=9 b=5
-
edit:
probier mal, nicht das zweite sondern das b in der zuweisung zu erhoehen.@net: das hat der lehrer zu entscheiden, weil der die noten vergibt
-
Ich vermute, das ist alles Unsinn, denn es gibt keine feste Reihenfolge, wann ausdruck1 und ausdruck2 in ausdruck1 + ausdruck2 abgearbeitet werden, deswegen ist meiner Meinung nach sowas wie a = ++b + b++ nicht definiert. Angenommen links wird zuerst abgearbeitet und b war vorher 4 ==> nach der Ausführung von a = ++b + b++ gilt: a = 10 und b = 6. Angenommen rechts wird zuerst abgearbeitet und b war vorher 4 ==> nach Ausführung von a = ++b + b++ gilt: a = 9 und b = 6. D.h. bei einem Compiler kommt a = 10 bei anderen könnte a = 9 kommen. So etwas wie ++irgendwas (+-*/wasweißich) blablabla++ ist nur Blödsinn.
edit: jetzt sehe ich, dass net auch drauf hingewiesen hat.
-
steht etwa im standard, dass die assoziativitaet der operatoren von der implementation abhaengig ist?
-
Die Assoziativität der Operatoren ist festgelegt, allerdings die Reihenfolge der Berechnungen nicht. d.h. der Ausdruck "a = f() + g();" kann je nach Compiler unterschiedlich ausgewertet werden: "tmp1=f();tmp2=g();a=tmp1+tmp2;" oder "tmp1=g();tmp2=f();a=tmp2+tmp1;".
Und an welcher Stelle die Nebeneffekte eines Ausdrucks wirksam werden, ist nach Standard auch nicht festgelegt (es gibt einige definierte "Synchronisationspunkte" - aber das + gehört nicht dazu).
-
solche fragen zu diskutieren ist hirnrissig. jeder hat seine meinung, die fakten stehen fest.