Der Inkrement- und Dekrementoperator

Bei der Verwendung von Schleifen oder anderen Konstrukten bei denen man etwas zählen möchte muss man oft den Wert einer Variablen im 1 erhöhen oder reduzieren. Der einfachste Weg das zu bewerkstelligen läuft über die Verwendung des Additions- oder Subtraktionsoperator:

i = i + 1; // i um 1 erhöhen...

Diese Möglichkeit ist zwar vollkommen richtig, jedoch nicht sehr elegant und lesbar, und um genau zu sein auch nicht unbedingt die schnellste Variante. Bei einer Schleife (siehe Schleifen) mit sehr vielen Durchläufen könnte man schon den Geschwindigkeitsverlust merken. Auch wenn ein moderner Compiler den Code optimieren sollte. Eleganter und kürzer ist aber die Verwendung des Inkrement- (++ → Erhöhen um 1) und des Dekrementoperators (-- → Reduzieren um 1). Diese gehören zu der Klasse der unären Operatoren, d.h. sie haben nur einen Operanden. Man kann diese Operatoren sowohl vor, als auch nach dir zu verändernde Variable schreiben, was man dann Preinkrement/-dekrement und Postinkrement/-dekrement nennt. Die Erhöhung unserer Variable 'i' könnte also wie folgt ausschauen:

i++; // gleiches Ergebnis wie i = i + 1
++i; // so geht es auch...

Pre- oder Post-?

Wo liegt jetzt der Unterschied? Nun, zuerst sollte man sich diese Begriffe ins Deutsche übersetzen. 'Pre' bedeutet soviel wie 'vor', 'Post' soviel wie 'nach'. Nehmen wir als erstes dieses Beispiel mit dem Postinkrementoperator:

a = 1;
b = ++a;

Hier wird a um eins erhöht, bevor b den Wert von a zugewiesen bekommt. Beide Variablen haben den Wert 2. Jetzt schauen wir uns das gleiche mit dem Prefixinkrementoperator an:

a = 1;
b = a++;

Nun wird zuerst b der Wert von a zugewiesen. Danach wird a um eins erhöht. Jetzt hat a den Wert 2 und b den Wert 1. Wie wir sehen ist der einzige Unterschied die Reihenfolge der Ausführung von Inkrement und Zuweisung. Das Präfix wird vor den anderen Anweisungen im Ausdruck ausgeführt, das Postfix nach den Anweisungen.

Das selbe geht auch abwärts. Dafür gibt es sogenannte Dekrementoperatoren. Diese haben auch ein Präfix und ein Postfix. Der Befehl

  i = i - 1;

kann auch dementsprechend auch so dargestellt werden:

   --i;

Oder so:

  i--;

Der Vorteil dieser Operatoren ist, dass diese Anweisung im Register des Prozessors, und nicht im Arbeitsspeicher, ausgeführt wird. Register sind kleine Zwischenspeicher im Prozessor. Wird ein Wert dorthin geladen, kann er auch schneller bearbeitet werden.

Hinweis: Es ist nicht zu empfehlen, mehrere Inkrement-/Dekrementoperatoren in einem Ausdruck zu verwenden. Die Reihenfolge der Ausführungen ist dann so sehr schwer festzustellen, was das Ergebnis unberechenbar macht.