![]() |
[C++] Frage zu Post- und Preincrement
Hallo,
ich hab diese Beispiele neulich gefunden blicke aber nicht so ganz durch was diese genau machen.
Code:
in den kommentar stehen die ergebnisse.
a) i=1;i = i+ ++i ; cout<<i<<endl; //4
b) i=1;i = i++ +i; cout<<i<<endl; //3 c) i=1;i = i+ i++ ; cout<<i<<endl; //3 d) i=1;i = ++i + ++i;cout<<i<<endl; //6 e) i=1;i = ++i + i++;cout<<i<<endl; //5 f) i=1;i = i+++ ++i; cout<<i<<endl; //5 g) i=1;i += i+ ++i; cout<<i<<endl; //6 h) i=1;i += i+++ i; cout<<i<<endl; //4 i) i=1;i += ++i+ ++i; cout<<i<<endl; //9 j) i=1;i += ++i+ i++; cout<<i<<endl; //7 k) i=1;i += i+++ ++i; cout<<i<<endl; //7 l) i=1;i += i+++ i++; cout<<i<<endl; //5 m) i=1;i += i++ **j ; cout<<i<<endl; //3 n) i=1;i += ++i**j ; cout<<i<<endl; //6 o) i=1;i*= ++*j **j; cout<<i<<endl; //8 p) char x='d'+'A'-'a';cout<<x<<endl; //D das mit dem preincrement und einmal postincrement ist mir etwas rätselhaft. könnte mir das bitte noch jemand erklären? vielen dank im voraus |
Re: [C++] Frage zu Post- und Preincrement
Machen wir es etwas einfacher:
Code:
Beim Preinkrement wird zuerst die Zahl erhöht und dann zugewiesen, beim Postinkrement wird die Zahl zuerst zugewiesen und dann erhöht.
int Zahl1 = 5;
int Zahl2; Zahl2 = ++Zahl1; // -> Zahl2 = 6; // -> Zahl1 = 6; Zahl1 = 5; Zahl2 = Zahl1++; // -> Zahl2 = 5; // -> Zahl2 = 6; |
Re: [C++] Frage zu Post- und Preincrement
Jepp, das kann man auch wunderbar missbrauchen (da gab es doch mal einen Wettbewerb, wer den kürzesten unleserlichen Code schreiben kann).
|
Re: [C++] Frage zu Post- und Preincrement
Japp, man muss ja schon bei den Beispielen von Sebastian genau schauen (ich zumindest), damit man es richtig macht. :mrgreen:
|
Re: [C++] Frage zu Post- und Preincrement
Ich hatte vor 4 Jahren mal einen 4-wöchigen Crashkurs in C, heute würde ich wohl komplett verzweifeln.
|
Re: [C++] Frage zu Post- und Preincrement
ok dann nehmen wir mal das erste beispiel von A)
also am anfang ist i = 1. du hast ja gesagt das preincrement kommt erst, also heißt das ja i ist dann 2, und dann nochmal i dazuzählen das würde 4 ergeben. hab ich das richtig verstanden? wenn ich also solche anweisungen habe:
Code:
dann kommt immer zuerst das preinkrement also erst 5 + 1 wegen den ++i danach kommt i nochmal dazu also 12 und dann noch um eines erweitern also 13.
int i = 5
i = i+ ++i + i++ richtig so? |
Re: [C++] Frage zu Post- und Preincrement
Müssten das nicht 18 sein? 5 + 6 + 6 + 1
|
Re: [C++] Frage zu Post- und Preincrement
oh heißt das also das das postincrement nach allen berechnungen kommt? also wenn ich schreibe:
Code:
das würde dann ja heißen 10 + 1 ?
int i = 4;
i = i+ i++; |
Re: [C++] Frage zu Post- und Preincrement
Ich komme da jetzt auf 9 :lol: . Das liegt aber daran, dass das Postincrement hier greift, da Du es ja derselben Variablen zuweist.
|
Re: [C++] Frage zu Post- und Preincrement
Ich würde auch 9 sagen.
|
Re: [C++] Frage zu Post- und Preincrement
oh die 4 sollte eigentlich ne 5 sein, sorry dafür aber ja stimmt, also erst immer die berechnungen durchführen dann postinkrement, und als allererstes immer preinkrement, vor allen berechnungen also, ja?
|
Re: [C++] Frage zu Post- und Preincrement
ok, es kommt 8 raus :mrgreen:
Code:
Das ist zwar in Java, aber wird in C auch so sein.
public void init() {
int i = 4; i = i + i++; System.out.println(i); // -> i = 8 } Mit i = 5 kommt 10 raus. [edit] Ist ja eigentlich auch "logisch":
Code:
Das heißt, es wird 4 + 4 gerechnet, danach i um 1 erhöht und dann das Ergebnis (4+4) i zugewiesen. :gruebel:
i = i + i++;
i = 4 + 4++; i = 8; |
Re: [C++] Frage zu Post- und Preincrement
also in c++ kommt dabei 9 raus hab es gerade probiert,
aber nochmal zu den aufgaben am anfang, die i hat es ganz schön in sich finde ich, da blicke ich sehr schwer durch wie das gehen soll
Code:
int i = 4;
i = i + i++; cout<<i; |
Re: [C++] Frage zu Post- und Preincrement
Das heißt, dass
Code:
in C++ anders als in Java berechnet wird?!
i = i + i++;
|
Re: [C++] Frage zu Post- und Preincrement
Dröseln wir das mal auf:
Code:
So, also ergibt sich:
int i = 4;
i = i + i++;
Code:
[edit]@Manuel: Ich habe hier leider kein Java mehr auf der Kiste (auch wieder Crashkurs :mrgreen: ), sonst könnte ich mal nachsehen. [/edit]
int i = 4;
i = i + i; i++; //das Postincrement nicht vergessen |
Re: [C++] Frage zu Post- und Preincrement
Liste der Anhänge anzeigen (Anzahl: 1)
sieht zumindest so aus, das programm mal im anhang kompiliert
|
Re: [C++] Frage zu Post- und Preincrement
Ja, das ist soweit korrekt. Die Frage ist nur, warum berechnet Java das anders?
@ Deflef, ich tippe es nebenher in Java ein ;-) |
Re: [C++] Frage zu Post- und Preincrement
ok wenn man das ganze zerlegen kann, dann zerlege doch nochmal aufgabe i, die ist mir etwas ein rätsel wie das system dort funktioniert.
|
Re: [C++] Frage zu Post- und Preincrement
Würd ich ja gerne machen, nur Java spuckt mir 6 aus und C++ spuckt mir, wie im Beispiel, 9 aus.
|
Re: [C++] Frage zu Post- und Preincrement
Hatte ich eben was von Verzweiflung gesagt? :mrgreen:
|
Re: [C++] Frage zu Post- und Preincrement
Zitat:
Es macht keinen Sinn, in C++ darüber zu diskutieren oder gar daran zu denken, solch einen Code zu benutzen, da der Standard sich darüber ausschweigt und das Ganze zum russischen Roulette mutiert. ![]() Die Aufgaben am Anfang lassen sich demnach in einem einzigen Satz lösen: "Finger weg!" :stupid: |
Re: [C++] Frage zu Post- und Preincrement
Sehe ich auch so, ich muss ganz wild hin und her springen, um 9 herauszubekommen, das kann ja nicht Sinn der Sache sein.
|
Re: [C++] Frage zu Post- und Preincrement
Nunja, wenn man in C++ die Aufgabe aufspaltet:
Code:
Es ist schon "logisch", was passiert:
++i // i =2
++i // i =3 i = i + i + i; // i = 3 + 3 + 3
Code:
Zuerst zwei mal inkrementieren (i = 3), dann 3 + 3 + 3 rechnen.
i = i + ++i + ++i;
|
Re: [C++] Frage zu Post- und Preincrement
ok wenn man es so zerlegt dann müsste j) ja auch so ähnlich gehen:
wenn man es aber so zerlegen möchte kommt man fast immer auf 5, irgendwie blick ich jetzt gar nicht mehr durch, wenn ich die j löse dann kommt ja zuerst ++i also dann ist i = 2, dann 2 + 2 + 1 mhmm echt seltsam |
Re: [C++] Frage zu Post- und Preincrement
Nein, stimmt schon:
Code:
sorry, das ist Aufgabe i...
// Ausgangsberechnung:
i += ++i + ++i; // Erstmal das += umstellen i = i + ++i + ++i; // jetzt i zweimal inkrementieren (dann ist i = 3) i = i + i + i; i = 3 + 3 + 3; i = 9 |
Re: [C++] Frage zu Post- und Preincrement
Hier für j:
Code:
// Ausgangrechnung
i += ++i+ i++; // Wieder das += umsetzen i = i + ++i + i++; // i inkrementieren (i = 2 jetzt) i = i + i + i++; // Postinkrement bleibt noch i = 2 + 2 + 2++; i = 6++; i = 7; |
Re: [C++] Frage zu Post- und Preincrement
Achso ist das gemeint ok das ergibt sinn,
aber das mit den zeigern wird schwerer, es stand noch dsa dabei:
Code:
Heißt das dann
*j=&i;
i += ++i**j ; nach dem ersten inkrement ist i = 2 also i = 2 + 2 + 2 (da ja j auf i zeigt) oder ist das zu einfach gedacht? das finde ich noch viel schwerer irgendwie, man kann diese aufgaben schon richtig fies stellen |
Re: [C++] Frage zu Post- und Preincrement
Hmm, kann ich dir jetzt nicht helfen, würde es aber mal so tippen:
Code:
Was kommt den raus?
*j=&i;
i += ++i**j; i = i + ++i **j; i = 2 + 2 * 2; i = 6 |
Re: [C++] Frage zu Post- und Preincrement
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:43 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz