Guten Morgen!
Eine Frage zu der einfachen Zeile Code:
1
x+=y+z;
Ist offensichtlich nicht das selbe, wie
1
x+=(y+z);
Bei mir ist x=2, y = 0 und z = 24 und beim ersten erhalte ich 0 für x
und nicht wie erwartet 26.
Die Frage ist nun:
Was macht der Compiler/Controller mit dem "+z", wenn er nur "x += y"
rechnet?
Danke für die Hilfe.
Grüße
Chris
Christian schrieb:> beim ersten erhalte ich 0 für x
Äh ... Logischerweise 2.
Also es wird nur y zu x addiert, und nicht y und z.
Die Frage ist also, was mit dem z passiert?
hm,
was für eine Programmiersprache ist das denn?
in C hat der + operator eine höhere Prio als der += Operator. Eigentlich
sollte er erst y+z ausrechnen und auf x draufaddieren.
Bernd schrieb:> Hallo TO-Troll, Freitag ist erst morgen.
Hä!?
Rolf M. schrieb:> In C ist das Ergebnis für beide gleich.
Ja, C. Aber offensichtlich ist es nicht gleich.
Es ist in C/C++ dasselbe, ob offensichtlich oder nicht. Wenn das reale
Ergebnis es nicht ist, dann nicht aufgrund der Sprache.
Der einzige Operator, bei es anders aussieht, ist
x += y, z
denn das ist
(x += y), z
und damit nicht
x += (y, z)
Christian schrieb:> Bernd schrieb:>> Hallo TO-Troll, Freitag ist erst morgen.>> Hä!?>> Rolf M. schrieb:>> In C ist das Ergebnis für beide gleich.>> Ja, C. Aber offensichtlich ist es nicht gleich.
Es könne auch sein, dass du nicht fähig bist zwei Zeilen primitivsten
C-Codes zu testen.
Hugo schrieb:> Bernd schrieb:>> Es könne auch sein>> dass du nicht fähig bist, eine Zeile primitivstes Deutsch richtig zu> schreiben.
Bin ich froh, dass ich mein Geld mit C verdiene.
Nebenbei: Könnte es sein, dass du nicht bis zwei zählen kannst?
x bleibt also unverändert? Dann schaust du dir das Ergebnis wohl an,
bevor die Anweisung ausgeführt worden ist.
Poste doch mal dein Testprogramm, das dieses seltsame Verhalten
aufweist.
Bernd schrieb:> Bin ich froh, dass ich mein Geld mit C verdiene.
Du meinst, in C sind Schreibfehler nicht so schlimm?
>> Nebenbei: Könnte es sein, dass du nicht bis zwei zählen kannst?
Könnte ich schon, wenn zwei Zeilen da wären :-)
Christian schrieb:> Bei mir ist x=2, y = 0 und z = 24 und beim ersten erhalte ich 0 für x> und nicht wie erwartet 26.
Wenn das so ist, was bedeutet dann
> Die Frage ist nun:> Was macht der Compiler/Controller mit dem "+z", wenn er nur "x += y"> rechnet?
x+=y würde doch 2 und nicht 0 ergeben.
Also Code posten.
Also nochmal an den TO:
In C kommt bei beiden deiner Ausdrücke das Selbe raus. Der Fehler muss
bei dir liegen oder du verschweigst uns (unbeabsichtigt) wichtige
Details.
Bitte den ganzen Quellcode in der aktuellen Version zeigen + Angabe des
Ziels (Mikrocontroller, Linux, etc..)
zitter_ned_aso schrieb:> Das (Assoziativ)Gesetz gilt ja schon in Mathe:
In Mathe ja ...
> Die Reihenfolge ist bei der Addition egal.
... aber nicht notwendigerweise auch in C.
In Mathe gibts keinen Überlauf, in C schon. Deshalb gilt
a + b + c = (a + b) + c
weil der Operator + links-assoziativ definiert ist.
Christian schrieb:> Rolf M. schrieb:>> In C ist das Ergebnis für beide gleich.>> Ja, C. Aber offensichtlich ist es nicht gleich.
Dann ist "offensichtlich" dein Compiler kaputt oder du hast was falsch
gemacht.
Rolf M. schrieb:> Dann ist "offensichtlich" dein Compiler kaputt oder du hast was falsch> gemacht.
Die Schnipsel im Eröffnungsposting sind einfach zuwenig Input. Das kann
alles mögliche sein, wie zum Beispiel ein nachfolgender Buffer-Overflow
vor der eigentlichen Ausgabe oder irgendein anderer Fehler, den der TO
übersehen hat.
Rolf M. schrieb:> Dann ist "offensichtlich" dein Compiler kaputt oder du hast was falsch> gemacht.
Vielleicht hat er ja seinen eigenen Compiler programmiert :D
Eine eigene Frage?
Dieser Thread ist über 7 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.