Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
-- Praktische Informatik (http://www.informatikerboard.de/board/board.php?boardid=6)
--- Inkrement - und Dekrementoperatoren (http://www.informatikerboard.de/board/thread.php?threadid=2810)


Geschrieben von HJ.S am 24.01.2016 um 18:12:

  Inkrement - und Dekrementoperatoren

Meine Frage:
Hallo,

eine Frage zu Inkrement und Dekrementoperatoren.

Inkremet bedeutet doch, dass eine Variable (ich nenne sie a) um 1 erhöht wird (je nachdem ob Pre-Inkrement oder Postinkrement ist der Rückgabewert a+1 oder a).

Meine Frage ist zu Postinkrement: Wann wird denn die Erhöhung der Variable durchgeführt? Erst wenn die komplette Codezeile durchgeführt ist? Oder ganze Anweisungsblöcke? Ich werde da nicht schlau daraus :-)

Meine Ideen:
Vielen Dank.



Geschrieben von eulerscheZahl am 24.01.2016 um 18:17:

 

Nach der Anweisung.
Beispiel:
a = 1
b = a++; //b=1, a=2
Du kannst aber auch Murks damit machen:
a = a++; //nicht definiert, solltest du deshalb lieber nicht machen.
b = a++ + ++a; //auch nicht definiert
Wenn du eine Variable mit a++ bzw. ++a erhöhst, darf sie im restlichen Ausdruck nicht nochmal vorkommen.



Geschrieben von ed209 am 24.01.2016 um 18:18:

 

Beides wird zur selben Zeit ausgefuehrt. Der Unterschied ist der Rueckgabewert.

Versuche folgenden Code auszuführen. Sowohl a als auch b haben am Ende denselben Wert.

code:
1:
2:
3:
4:
5:
6:
int a=42; 
System.out.println("Postinkrement: ".(a++));
int b=42;
System.out.println("Präinkrement: ".(++b));


Der Code ist in Java, aber sollte leicht in andere Sprachen überführbar sein.

Gruss,
ED



Geschrieben von HJ.S am 24.01.2016 um 19:01:

 

Vielen Dank für die Antworten.

Wenn ich jetzt folgenden Code habe:

[CODE]
int x, z=10;
System.out.println(x=z++); // z++ wird ausgewertet, z = 10; z wird in x geschrieben und z um 1 erhöht auf 11; x = 10, z=11;
System.out.println (z = ++x); //x wird zuerst um eins erhöht und dann z zugewiesen, also ist z = 11 und x = 11;
System.out.println (x += ++z); // ++z hat die höhere Priorität, also wird z=12, x=11 und das Resultat 23;
System.out.println (z += x++); // x++ hat wieder höhere Priorität, bleibt aber vorerst bei 23 , z = z+x; somit als Ergebnis 35.


Wäre das richtig?



Geschrieben von eulerscheZahl am 24.01.2016 um 20:20:

 

Probier es doch einfach aus. Augenzwinkern
Ja, es ist richtig.
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
int x, z = 10;
System.out.println(x = z++); //10
System.out.println("x = " + x + "   z = " + z); //x = 10   z = 11
System.out.println(z = ++x); //11
System.out.println("x = " + x + "   z = " + z); //x = 11   z = 11
System.out.println(x += ++z); //23
System.out.println("x = " + x + "   z = " + z); //x = 23   z = 12
System.out.println(z += x++); //35
System.out.println("x = " + x + "   z = " + z); //x = 24   z = 35



Geschrieben von HJ.S am 24.01.2016 um 20:39:

 

Vielen Dank :-)


Forensoftware: Burning Board, entwickelt von WoltLab GmbH