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.
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