Читать книгу Algorithmen und Datenstrukturen - Gunter Saake - Страница 58

2.5.3Operatoren

Оглавление

Arithmetische Operatoren Vergleichsoperatoren

Zu den Operatoren zählen die bekannten arithmetischen Operatoren +, -, * (Multiplikation), / (Division) und % (Rest der ganzzahligen Division), wobei der +-Operator auch auf Zeichenketten angewendet werden kann und dort das Aneinanderhängen der Operanden bewirkt. Weiterhin gibt es natürlich noch die Vergleichsoperatoren <, >, <=, >= und == für Gleichheit bzw. != für Ungleichheit sowie für logische Vergleiche && als Konjunktion und || als Disjunktion. Alle diese Operatoren sind binär und werden in der gebräuchlichen Infixnotation verwendet, d.h., der Operator steht zwischen den Operanden: a op b.

Bitoperator

Weiterhin gibt es Bitoperatoren, die eine bitweise Manipulation von Werten erlauben. Hierzu zählen u.a. das bitweise Verschieben nach links (<<), nach rechts (>>) sowie die bitweise Und-Verknüpfung (&) und die Oder-Verknüpfung (|@|). Alle diese Operatoren interpretieren die Werte der Operanden als Bitfolgen und führen dementsprechend die Manipulation durch. So liefert der Ausdruck 3 << 2 den Wert 12, da 3 binär der Bitfolge 0011 entspricht und diese um 2 Positionen nach links verschoben den Binärwert 1100 (also 12) liefert. Auf diese Weise lassen sich beispielsweise die Zweierpotenzen sehr effizient bestimmen, weil 2n durch die Bitoperation 1 << n berechnet werden kann. Die bitweise Verknüpfung mit & bzw. | kann u.a. genutzt werden, um bestimmte Bits zu maskieren. So liefert etwa der Ausdruck 5 & 3 den Wert 1, da 5 in Binärdarstellung 0101 ist und eine bitweise Und-Verknüpfung zwischen 0101 und 0011 den Wert 0001 liefert.

Unäre Operatoren Präfixnotation Postfixnotation

Zu den unären Operatoren, die nur einen Operanden erfordern, gehören die logische Negation ! sowie die Inkrement- (++) und Dekrementoperatoren (--). Letztere sind der Programmiersprache C entlehnt und erlauben das Erhöhen bzw. Verringern des Wertes des Operanden um 1. Somit ist der Ausdruck a++ äquivalent zu a = a + 1. Zu beachten ist hier, dass die Stellung der Operatoren zum Operanden eine besondere Bedeutung hat. So wird bei der Präfixnotation ++a erst der Wert von a inkrementiert und dann der neue Wert in den Ausdruck zur weiteren Berechnung eingesetzt, während in der Postfixnotation a++ erst der Wert eingesetzt wird und danach inkrementiert wird. Das folgende Beispiel demonstriert diesen Unterschied. Der Variablen b1 wird der ursprüngliche Wert von a1 (hier: 42) zugewiesen. Erst danach erfolgt die Inkrementierung. Dagegen wird a2 vor der Zuweisung inkrementiert, so dass b2 den neuen Wert 43 erhält.

int a1 = 42, a2 = 42, b1, b2;

b1 = a1++; // b1 = 42, a1 = 43

b2 = ++a2; // b2 = 43, a2 = 43

Zuweisungsoperator

Schließlich gibt es noch den Zuweisungsoperator »=« – der nicht mit dem logischen Vergleich verwechselt werden darf – sowie erweiterte Formen davon, die die Kombination mit einem binären Operator in der Notation op = erlauben. Hierbei handelt es sich aber nur um eine verkürzte Schreibweise »a op = x«, die in der ausführlichen Form als »a = a op x« notiert werden kann. So sind die beiden folgenden Anweisungen äquivalent:

b += 5;

b = b + 5;

Vorrangregeln

Für die Auswertung von Ausdrücken mit diesen Operatoren gelten Vorrangregeln, die den üblichen Rechenregeln (»Punkt- vor Strichrechnung«) folgen und in Tabelle 2–2 noch einmal für die gebräuchlichsten Operatoren zusammengefasst sind. Andere Auswertungsreihenfolgen lassen sich natürlich durch Klammerung erzwingen.

Tab. 2–2 Wichtige Operatoren in Java


Die Werte in der Spalte »Vorrang« geben die Reihenfolge an, in der die Operatoren ausgewertet werden. Operatoren mit kleinerem Wert werden dabei zuerst ausgewertet. Demzufolge wird in einem Ausdruck wie »a = 3 * ++b« zuerst die Variable b inkrementiert, dieser Wert dann mit 3 multipliziert und das Ergebnis schließlich der Variablen a zugewiesen. Die Spalte »Assoz.« bezeichnet die Assoziativität der Operatoren, die angibt, in welcher Richtung Operatoren mit gleichem Vorrang ausgewertet werden. Im Normalfall ist dies von links nach rechts (»L«). Speziell die unären Operatoren und die Zuweisungsoperatoren sind jedoch rechts-assoziativ (»R«). Daher sind auch Ausdrücke wie z.B. »a = b = c = 0« möglich.

Algorithmen und Datenstrukturen

Подняться наверх