Bestimmung von Programmausschnitte
-
@DirkB sagte in Bestimmung von Programmausschnitte:
@dooni sagte in Bestimmung von Programmausschnitte:
Bei den letzten hatte keine Idee
Ich weiß zwar, dass die Zahlen im Binär gerechnet werden.Ja, da musst du binär rechnen. l ist binäres oder & ist binäres und
Aber wie rechnet man eine Kommazahl im Binär?
ist hier nicht nötig.
zu Aufgabe a) es gibt postinkrement a++ und preinkrement ++a
Bei dem einen wird der Wert von a für die Berechnung genommen und nach der Berechnung wir a verändert.
Beim anderen wird erst der Wert von a verändert und dann für die Berechnung genommen.Zudem werden die Anweisungen nacheinander ausgeführt.
wennc = a++;
ausgeführt wurde, dann ist a auf alle Fälle verändert. Welchen Wert hat aber a?wenn c=a++ ,dann steigt die Zahl um 1 und nimmt a die gleiche Zahl wie c
also a=2
a=3
a=2zu Aufgabe b)
Warum sollte sich auch y in der zweiten Zeile ändern?ja da stimmt y ändert sich nicht
dann ändert sich x in der dritte Zeile auch nichtWarum ändert sich a beim Funktionsaufruf?
ist a nicht eine Kopie von x?
Dort wird eine Kopie vom Wert übergeben.
Bei b ist es eine Referenz.
-
@dooni sagte in Bestimmung von Programmausschnitte:
wenn c=a++ ,dann steigt die Zahl um 1 und nimmt a die gleiche Zahl wie c
nicht ganz, erst erhält c den wert von a und dann wird a hochgezählt.
somit ist c dann a-1.
-
@dooni sagte in Bestimmung von Programmausschnitte:
ist a nicht eine Kopie von x?
Eine Kopie ist ein anders Teil, das wie das (derzeitige) Original aussieht.
Du kannst die Kopie verändern, das wirkt sich nicht auf das Original aus.
Du kannst das Original verändern, das wirkt sich nicht auf die Kopie aus.Darum macht man ja Kopien. Ein Backup ist ja auch nichts anderes.
-
@DirkB
Also a wird sowohl in der erste als auch in der zweite sich nicht ändern
-
@Bushmaster
und so ist das richtig
https://ibb.co/0XXrM0Q
-
@dooni sagte in Bestimmung von Programmausschnitte:
@Bushmaster
und so ist das richtig
https://ibb.co/0XXrM0Qnein, das b=a kommt nach c=a++, also ist b=3, wenn a vorher 2 war.
-
@dooni sagte in Bestimmung von Programmausschnitte:
@Bushmaster
und so ist das richtigNein, denn:
@DirkB sagte in Bestimmung von Programmausschnitte:
Zudem werden die Anweisungen nacheinander ausgeführt.
wenn c = a++; ausgeführt wurde, dann ist a auf alle Fälle verändert. Welchen Wert hat aber a?Das b = a; kommt danach. Mit dem neuen Wert von a.
-
einfach folgendes merken: steht das ++ vor der variablen, wird sie zuerst hochgezählt und danach verwendet. steht das ++ dahinter, wird die variable erst verwendet und danach hochgezählt.
btw, was ist b hier?
a=1; b=a+++++a;
-
@Bushmaster
Also b nimmt den neuen Wert von a, wenn a um 1 steigt, dann ist b= a+1
-
@Bushmaster
a=1
c=++a => c=2
c=a++ =>c=1
habe ich es so richtig verstanden?
-
@dooni sagte in Bestimmung von Programmausschnitte:
@Bushmaster
Also b nimmt den neuen Wert von a, wenn a um 1 steigt, dann ist b= a+1und was ist mit +++a ?
-
@dooni sagte in Bestimmung von Programmausschnitte:
@Bushmaster
a=1
c=++a => c=2
c=a++ =>c=1
habe ich es so richtig verstanden?ja, so passt das.
-
@Bushmaster
Das weiß ich nicht
Ich bin noch eine Anfägerin
-
@Bushmaster sagte in Bestimmung von Programmausschnitte:
b=a+++++a;
das wäre b = a++ + ++a;
Da es aber undefiniert ist, wann a verändert wird (direkt vor/nach dem Zugriff oder erst wenn die Anweisung zu Ende ist (beim ; ) ist es vom Compiler/Version/System abhängig, was genau passiert.
-
@DirkB sagte in Bestimmung von Programmausschnitte:
Da es aber undefiniert ist, wann a verändert wird (direkt vor/nach dem Zugriff oder erst wenn die Anweisung zu Ende ist (beim ; )
das ist mies.
-
auch witzig (C++14 -Wall):
++a++; // compiler fehler, lvalue required as increment operand
aber das
(++a)++; // compiliert!
aber das nicht
(a++)++; // lvalue required as increment operand
und das auch nicht
++(a++); // lvalue required as increment operand
schon seltsam
-
Wieso ist das seltsam? Und
++a++
ist dasselbe wie++(a++)
.
-
@Bashar sagte in Bestimmung von Programmausschnitte:
Wieso ist das seltsam? Und
++a++
ist dasselbe wie++(a++)
.aber warum funktioniert '(++a)++'?
die klammern machen erst einen lvalue aus ++a, aber nicht aus a++.
(++(++a))++ funktioniert auch.
wenn a zuvor 1 war, ist es danach 4.
http://cpp.sh/
-
@Bushmaster
++a
ist ein lvalue, fertig. Wie kommst du darauf, dass die Klammern etwas damit zu tun haben? Das ist ja fast schon magisches Denken.Edit: Das ganze "funktioniert" damit noch lange nicht, es ist immer noch undefiniertes Verhalten.
-
@Bashar sagte in Bestimmung von Programmausschnitte:
++a ist ein lvalue, fertig. Wie kommst du darauf, dass die Klammern etwas damit zu tun haben?
also ist es ein fehler des compilers, dass er ++a++ ablehnt. oder was könnte das noch sein?