ANHANG F: Vorrangregeln (Hierarchie der Operatoren)
Mehrere Operatoren in einer Anweisung werden nach einer vordefinierten Reihenfolge abgearbeitet. Ein Operator mit höherer Hierarchie wird vor einem Operator abgearbeitet, der eine niedrigere Hierarchie besitzt. Haben zwei Operatoren die gleiche Hierarchie, werden sie in der Reihenfolge abgearbeitet, in der sie auftreten. Ist eine andere Reihenfolge bei der Abarbeitung gewünscht, kann diese durch eine Klammerung der Ausdrücke erreicht werden.
Die Arität (Stelligkeit) gibt an, wie viele Operanden der Operator besitzt. Unäre Operatoren erwarten lediglich einen Operanden (z. B. NOT a
), während binäre Operatoren zwei Operanden erwarten (z. B. a AND b
).
Die Abarbeitung von Operatoren der gleichen Hierarchie kann von links nach rechts oder aber von rechts nach links erfolgen. Z. B. ist a-b-c
gleichbedeutend mit (a-b)-c
(Abarbeitung von links), während **a
gleichbedeutend mit *(*a)
ist (Abarbeitung von rechts). Ein 'N/A' gibt an, dass aufgrund der Eigenschaften des Operators keine Richtung existiert.
Die folgende Tabelle enthält alle Operatoren absteigend nach ihrer Hierarchie. Die Hierarchie-Ebenen werden durch Trennstriche markiert; alle Operatoren auf derselben Ebene werden auch gleichberechtigt behandelt. Operatoren mit höherer Hierarchie (also diejenigen, die in der Tabelle weiter oben stehen) binden stärker als Operatoren niedrigerer Ebenen. Beispielsweise ist a MOD b OR c
gleichbedeutend mit (a MOD b) OR c
(MOD
steht in der Hierarchie höher als OR
).
Operator | Klassifizierung | Arität | Bedeutung | Assoziativität |
---|---|---|---|---|
|
Funktion |
unär |
Typumwandlung |
N/A |
|
Funktion |
unär |
Adressoperator |
N/A |
|
Funktion |
unär |
Adressoperator |
N/A |
|
Funktion |
unär |
Adressoperator |
N/A |
|
Zugriffsoperator |
/ |
Stringindex/Pointerindex |
von links |
|
Indizierung |
/ |
Arrayindex |
von links |
|
Auswertungsoperator |
/ |
Funktionsaufruf |
von links |
|
Zugriffsoperator |
/ |
Strukturzugriff |
von links |
|
Zugriffsoperator |
/ |
Indirektzugriff |
von links |
|
Zugriffsoperator |
unär |
Adressoperator |
von rechts |
|
Zugriffsoperator |
unär |
Dereferenzierung |
von rechts |
|
Datenoperator |
unär |
Speicher alloziieren |
von rechts |
|
Datenoperator |
unär |
Speicher dealloziieren |
von rechts |
|
Exponent |
unär |
Exponent |
von links |
|
Arithmetischer Operator |
unär |
Negativ |
von rechts |
|
Arithmetischer Operator |
binär |
Multiplizieren |
von links |
|
Arithmetischer Operator |
binär |
Dividieren |
von links |
|
Arithmetischer Operator |
binär |
Integerdivision |
von links |
|
Arithmetischer Operator |
binär |
Modulo Division |
von links |
|
Bitoperator |
binär |
Bitverschiebung nach links |
von links |
|
Bitoperator |
binär |
Bitverschiebung nach rechts |
von links |
|
Arithmetischer Operator |
binär |
Addieren |
von links |
|
Arithmetischer Operator |
binär |
Subtrahieren |
von links |
|
Verknüpfungsoperator |
binär |
Stringverkettung |
von links |
|
Vergleichsoperator |
binär |
Gleich |
von links |
|
Vergleichsoperator |
binär |
Ungleich |
von links |
|
Vergleichsoperator |
binär |
Kleiner als |
von links |
|
Vergleichsoperator |
binär |
Kleiner oder gleich |
von links |
|
Vergleichsoperator |
binär |
Größer oder gleich |
von links |
|
Vergleichsoperator |
binär |
Größer als |
von links |
|
Bitweiser Operator |
unär |
Verneinung |
von rechts |
|
Bitweiser Operator |
binär |
Und |
von links |
|
Bitweiser Operator |
binär |
Oder |
von links |
|
Bitweiser Operator |
binär |
Äquivalenz |
von links |
|
Bitweiser Operator |
binär |
Implikat |
von links |
|
Bitweiser Operator |
binär |
Exklusives Oder |
von links |
|
Logischer Operator |
binär |
Verkürztes und |
von links |
|
Logischer Operator |
binär |
Verkürztes oder |
von links |
|
Zuweisungsoperator |
binär |
Zuweisung |
N/A |
|
Zuweisungsoperator |
binär |
Verkettung + Zuweisung |
N/A |
|
Zuweisungsoperator |
binär |
Addition + Zuweisung |
N/A |
|
Zuweisungsoperator |
binär |
Subtraktion + Zuweisung |
N/A |
|
Zuweisungsoperator |
binär |
Multiplikation + Zuweisung |
N/A |
|
Zuweisungsoperator |
binär |
Division + Zuweisung |
N/A |
|
Zuweisungsoperator |
binär |
Integerdivision + Zuweisung |
N/A |
|
Exponent |
binär |
Exponent + Zuweisung |
von links |
|
Zuweisungsoperator |
binär |
Modulo + Zuweisung |
N/A |
|
Zuweisungsoperator |
binär |
Und + Zuweisung |
N/A |
|
Zuweisungsoperator |
binär |
Äquivalenz + Zuweisung |
N/A |
|
Zuweisungsoperator |
binär |
Implikat + Zuweisung |
N/A |
|
Zuweisungsoperator |
binär |
Oder + Zuweisung |
N/A |
|
Zuweisungsoperator |
binär |
Exklusives oder + Zuweisung |
N/A |
|
Zuweisungsoperator |
binär |
Bitverschiebung links + Zuw. |
N/A |
|
Zuweisungsoperator |
binär |
Bitverschiebung rechts + Zuw. |
N/A |
|
Zuweisungsoperator |
binär |
Zuweisung |
N/A |
|
Zuweisungsoperator |
binär |
Zuweisung |
N/A |