Advanced Services | Operatoren 2 |
Hier ein weiterer Auszug aus der vollständigen Operatorentabelle. Die Inkrement und Dekrementoperatoren werde meist im Zusammenhang mit Schleifen eingesetzt. Der bedingte Ausdruck ist oft ein eleganter Ersatz für eine if/else Entscheidung und die zusammengesetzten Zuweisungsoperatoren sind eine beliebte Abkürzung mit der man zwei Statements in ein einziges zusammenfassen kann.
Präzedenz | Operator | Bezeichnung | Assoziativität | Operandentyp |
---|---|---|---|---|
2 | Unäre Operatoren | |||
++ | Prä/PostfixInkrement | rechts | numerisch | |
-- | Prä/PostfixDekrement | rechts | numerisch | |
13 | bedingter Ausdruck | |||
? : | bedingter Ausdruck | rechts | boolesch ? alle : alle | |
14 | Zuweisung und zusammengesetze Zuweisungsoperatoren | |||
= | Zuweisung | rechts | alle | |
+= | AdditionsZuweisung | rechts | numerisch | |
-= | SubtraktionsZuweisung | rechts | numerisch | |
*= | MultiplikationsZuweisung | rechts | numerisch | |
/= | DivisionsZuweisung | rechts | numerisch | |
%= | ModuloZuweisung | rechts | numerisch | |
<<= | LinksShiftZuweisung | rechts | integral | |
>>= | RechtsShiftZuweisung | rechts | integral | |
&= | bitweise/logische AND-Zuweisung | rechts | integral, boolesch | |
^= | bitweise/logische XOR-Zuweisung | rechts | integral, boolesch | |
|= | bitweise/logische OR-Zuweisung | rechts | integral, boolesch |
Zuweisungen der Form x = x +y kommen im Zusammenhang mit Schleifen sehr oft vor. Schon den Entwicklern von C war diese Schreibweise viel zu lang und sie erfanden neue Operatoren, mit denen eine kürzere, und doch sprechende Schreibweise möglich ist. Da C# seine Wurzeln in C und C++ hat, hat es diese Operatoren übernommen. Wie bei allen Operatoren die aus zwei Zeichen bestehen, müssen die beiden Zeichen ohne Zwischenraum geschrieben werden.
Ausführliche Schreibweise | Abkürzung |
---|---|
x = x + y | x += y |
x = x - y | x -= y |
x = x * y | x *= y |
x = x / y | x /= y |
x = x op y | x op= y |
Die letzte Zeile der Tabelle zeigt das allgemeine Prinzip. op steht für irgendeinen Operator.
In der ersten Tabelle sehen sie, welche Operatoren sie für op hernehmen können. Beachten Sie,
daß die Reihenfolge wichtig ist. x -= y ist die Abkürzung für x = x - y und nicht
für x = y - x ! Statt der Variablen y kann natürlich auch ein komplexerer Ausdruck stehen.
Denken Sie sich den rechtsstehenden Ausdruck aber dann immer mit einer Klammer.
So bedeutet etwa x *= 2*a+b
ausführlich x = x*(2*a+b) und
nicht x = x*2*a + b
Mit den obigen neuen Operatoren läßt sich also x = x+1 kürzer als x +=1 schreiben. In diesem Fall läßt sich die Schreibweise durch einen weiteren Operator nochmal verkürzen.
Ausführliche Schreibweise | Abkürzung | Präfix | Postfix |
---|---|---|---|
x = x + 1 | x += 1 | ++x | x++ |
x = x - 1 | x -= 1 | --x | x-- |
Für die Variable x spielt es keine Rolle ob ++ vor oder hinter dem Variablennamen steht. Die Variable wird immer um 1 erhöht (bzw. erniedrigt). betrachtet man aber den Ausdruck x++ bzw. ++x, so ergibt sich schon ein Unterschied, der Ausdruck x++ hat den Wert von x, der Ausdruck ++x hat den wert (x+1). Das folgende Beispiel macht dies deutlicher:
c mit Postfixoperator | Bedeutung | c mit Präfixoperator | Bedeutung |
---|---|---|---|
a = b + c++ ; | a = b + c; c = c + 1 ; |
a = b + ++c ; | c = c + 1 ; a = b + c; |
Bei der Postfixschreibweise findet die Inkrementierung also nach der Zuweisung statt, bei der
Präfixschreibweise vorher. Im letzten Fall ist also der Wert von a um genau 1 höher als im ersten Fall.
Wichtig sind auch die unterschiedlichen Prioritäten. Während die zusammengesetzten Zuweisungsoperatoren
die niedrigste Prioritätsstufe haben, stehen ++ und -- als unäre Operatoren weit oben in der
Präzedenzfolge.
Der ersten Tabelle kann man entnehmen, daß die Wertzuweisung mit = ein Operator ist. Also ist (b=4) ein Ausdruck. Sein Wert ist der Wert der Zuweisung, hier also vier. Damit ist (b=4) z.B. folgendermaßen verwendbar:
Im ersten Fall werden zwei Zuweisungemn gemacht. b erhält den Wert 4 und x erhält den um 4
erhöhten Wert von c. Im zweiten Fall erhalten a und b den Wert 4. Während das erste Beispiel
mehr ein Verwirrspiel ist, ist das zweite Beispiel sehr geläufig. Wenn man erkennt, daß der
Operator rechtsassoziativ ist, kann man die Klammern weglassen, der Compiler setzt sie automatisch.
Dadurch ist eine
Mehrfachzuweisung
möglich. Im folgenden Beispiel erhalten alle Variablen den Wert 1.
int a , b , c , d = 1 ; a = b = c = d ;
Es geht auch so:
int b , c , d , a = b = c = d = 1;
Aber so geht es nicht...
int a = b = c = d = 1 , b , c , d;
Warum wohl ?