Advanced  Services Operatoren 2 Back Next Up Home

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

Zusammengesetzte Zuweisungsoperatoren

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


Post/PräfixInkrement bzw. Dekrement

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.


= ist ein Operator

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 ?

Valid XHTML 1.0 Strict top Back Next Up Home