You are not logged in.

  • Login

1

Sunday, November 19th 2006, 3:17pm

i++ und ++i Unterschied liegt wo?

Hallo wo ist der Unterschied zwischen ++i und i++ ?

Hab das dazu gefunden:

Quoted

Steht der Inkrement-Operator vor der Variablen, wird die Variable erhöht und der um 1 erhöhte Wert zurückgegeben. Steht der Inkrement-Operator hinter der Variablen, wird die Variable erhöht, jedoch der vorherige noch nicht um 1 erhöhte Wert zurückgegeben.


Ahja...

Nehmen wir mal ein paar Beispiele:

C Quellcode

1
i += k++ + ++j * 2;


was wird da Schrittweise gemacht?

1. Schritt: y=(j+1)*2
2. Schritt: k=k+1
3. Schritt: z= k+y
4. Schritt: i = i + z

C Quellcode

1
j += --k % 5 + i--;


1. Schritt: z=((k-1)%5)+i
2. Schritt: i=i11
3. Schritt: j=j+z

C Quellcode

1
--j += ++k -= 5 / 2;


1. Schritt: z=5/2
2. Schritt: k=(k+1)-z
3. Schritt: j=(j-1)+k

C Quellcode

1
++k -= 2 * --k - k++ / 2;


1. Schritt: z=(2*(k-1))
2. Schritt: k=k+1
3. Schritt: k=k+1
4. Schritt: k=(z-(k/2))-k

ist das richtig? Die Schritte hab ich hin geschrieben, weiß nur nicht ob sie stimmen...

Gruß,

cewbie

2

Sunday, November 19th 2006, 4:40pm

zugegeben, ich hab mir deine beispiele nicht angeschaut.

denn das ganz ist super einfach und dazu reichen super einfache beispiele ;-)
i++ erhöht die variable nach Aufruf

C Quellcode

1
2
3
int i=0;
printf("%d", i++);
printf("%d", i);

Ausgabe = 0,1

++i erhöht die Variable direkt

C Quellcode

1
2
3
int i=0;
printf("%d", ++i);
printf("%d", i);

Ausgabe = 1,1

3

Sunday, November 19th 2006, 4:49pm

kann trotzdem mal jemand meine Beispiele durchsehen? Wäre wichtig :roll:

EDIT: mit dem

C Quellcode

1
"%d"
kann ich nix anfangen d0nut

4

Sunday, November 19th 2006, 5:17pm

Hast du die stdio.h nicht eingebunden?
%i oder %d kannst du für Integer nehmen

Zu deinen Beispielen:
Zu Beginn ist alles null und die 4 Beispiele werden nacheinander ausgeführt?

Quoted

i += k++ + ++j * 2;
=> k = 1
=> j = 1
=> i = (0 + 1) * 2
=> i = 2

Quoted

j += --k % 5 + i--;
=> k = 0
=> i = 1
=> j += 0 % 5 + 2
=> j += 2
=> j = 3


--j += ++k -= 5 / 2; (das funktioniert?)
++k -= 2 * --k - k++ / 2; (das funktioniert?)

5

Sunday, November 19th 2006, 5:35pm

Hier ist die komplette Aufgabe:

Gegeben ist folgender Programmausschnitt:

C Quellcode

1
2
3
4
5
6
7
8
9
10
...
int i=1, j=2, k=3;
for (i=1;i < 20; i++, ++j, k++)
j += 2;
i += k++ + ++j * 2; // *
j += --k % 5 + i--; // *
--j += ++k -= 5 / 2 ; // *
j >>= 3;
++k -= 2 * --k - k++ / 2; // *
...


Quoted


a) Welche Werte stehen nach Ausf¨uhrung des Programmausschnittes in den Variablen i, j
und k.
b) Schreiben Sie f¨ur jede mit * (im Kommentar) gekennzeichneten Zuweisungen eine zugeh
¨orige Folge von Zuweisungen mit Klammerausdr¨ucken (falls nicht in einem Ausdruck
darstellbar), welcher die Verarbeitungsreihenfolge des Compilers verdeutlicht.
z.B. k += 6 % 4 - 1 * k++; 1. Schritt: z = ((6 % 4) - (1 * k));
2. Schritt: k = k + 1;
3. Schritt: k = k + z;



Es geht bei b nicht darum was dabei rauskommt, sondern nur, dass man die Zeilen richtig erklärt. Deshalb verstehe ich nicht was du da machst dOnUt?

6

Sunday, November 19th 2006, 6:57pm

Der Unterschied ist doch ganz einfach. Ich hab die beiden Operatoren mal in 2 Funktionen übersetzt, die das gleiche machen wie i++ bzw ++i. Beide Funktionen machen das gleiche, haben aber einen anderen Rückgabewert. Ich hoffe dadurch ist verständlicher was der Unterschied ist.

C Quellcode

1
2
3
4
5
6
7
8
9
int inc_prefix(int i) {
 i = i+1;
 return i;
}
 
int inc_postfix(int i) {
 i = i+1;
 return i-1;
}

7

Sunday, November 19th 2006, 8:17pm

Quoted from ""cewbie""

Es geht bei b nicht darum was dabei rauskommt, sondern nur, dass man die Zeilen richtig erklärt. Deshalb verstehe ich nicht was du da machst dOnUt?

Du hast ja nirgends eine Aufgabe formuliert, und bevor ich den Thread einfach ignoriere, mach ich immerhin das, was ich darunter verstehe ;-)

Aber mehr als mein einfaches Beispiel aus dem ersten Posting gibt es zu der Aufgabe eigentlich auch nicht zu verstehen. Der Rest ist einfach nur zeitaufwändig.

Hier meine Lösung zur (1)

Quoted

i += k++ + ++j * 2;

1. Schritt: z=k++ + ++j * 2
2. Schritt: y=k
3. Schritt: k=k+1
4. Schritt: j=j+1
5. Schritt: x=j
6. Schritt: w=j*2
7. Schritt: z=y+w
8. Schritt: i=i+z

8

Sunday, November 19th 2006, 8:26pm

Hallo ist deine Lösung nicht etwas unnötig kompliziert? Die Aufgabenstellung war eigentlich meiner Ansicht nach nicht nötig, da bereits im 1. Posting das nötige stand? Dachte ich zumindest :P

9

Sunday, November 19th 2006, 8:41pm

Nein, weil er die Hilfswerte auch auf unterschiedliche Variablen abbildet, wie es der Prozessor (vielleicht) in die Register legt.

10

Sunday, November 19th 2006, 8:59pm

Quoted from ""phax""

Nein, weil er die Hilfswerte auch auf unterschiedliche Variablen abbildet, wie es der Prozessor (vielleicht) in die Register legt.


ok dann ändere ich meine Lösung ;) vielen Dank

11

Saturday, November 25th 2006, 1:26pm

Quoted from ""d0nUt""



Hier meine Lösung zur (1)

Quoted

i += k++ + ++j * 2;

1. Schritt: z=k++ + ++j * 2
2. Schritt: y=k
3. Schritt: k=k+1
4. Schritt: j=j+1
5. Schritt: x=j
6. Schritt: w=j*2
7. Schritt: z=y+w
8. Schritt: i=i+z


Das war übrigens falsch, genau wie das andere was ich noch selbst gemacht hatte oO

12

Saturday, November 25th 2006, 1:43pm

*g* aber was genau war denn richtig?
Zu ausführlich? Schusselfehler? Grober Fehler?

13

Saturday, November 25th 2006, 3:14pm

hier:
cewbie has attached the following image:
  • aufgabe1__149.gif

14

Saturday, November 25th 2006, 3:16pm

das geile ist bei Aufgabe 2 hab ich n Punkt Abzug bekommen, weil ich && statt & benutzt habe :(
cewbie has attached the following image:
  • aufgabe2__191.gif

Social bookmarks