Operatorassoziativität

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen

Operatorassoziativität bezeichnet vor allem in der Informatik, aber auch in Mathematik und Logik:

  1. im engeren Sinn die Eigenschaft eines Operators , dass die Reihenfolge, mit der mehrere Vorkommnisse dieses Operators in einem Ausdruck ausgewertet werden, keinen Einfluss auf das Ergebnis der Auswertung hat, das heißt, dass für ihn das Assoziativgesetz gilt;
  2. im weiteren Sinn die Festlegung, auf welche Weise ein nicht im engeren Sinn assoziativer Operator ausgewertet werden soll.

Zum Beispiel sind in der Mathematik die Addition und Multiplikation assoziative Operatoren, weil und ist. In der Logik sind Konjunktion und Disjunktion assoziativ, weil einerseits und und andererseits und äquivalent sind.

Bei nicht assoziativen Operatoren hängt das Ergebnis von der Operatorassoziativität ab. Um zu vermeiden, dass Ausdrücke mit nebeneinander stehenden, gleichwertigen Operatoren ohne Klammerung mehrdeutig sind, wird eine seitige Assoziativität per Konvention festgelegt.

Linksassoziative Operatoren[Bearbeiten | Quelltext bearbeiten]

Ein linksassoziativer Operator wird von links nach rechts ausgewertet.[1][2][3][4][5] Eine binäre Verknüpfung gilt als links-assoziativ, wenn

etc.

aufzufassen ist. Beispiele für linksassoziative Operationen sind:

      Jedoch: Bei waagrechten Bruchstrichen bindet der kürzere Bruchstrich stärker:

Rechtsassoziative Operatoren[Bearbeiten | Quelltext bearbeiten]

Ein rechtsassoziativer Operator wird von rechts nach links ausgewertet.

etc.

Beispiele hierfür:[6]

  • Die Potenzierung in der Mathematik: , beispielsweise bei den Fermat-Zahlen; meint man hingegen kann das auch zu vereinfacht werden.
  • Die Subjunktion in der Logik wird von den meisten Autoren rechtssassoziativ verwendet, das heißt, dass als zu lesen ist.
  • Der Zuweisungsoperator verschiedener Programmiersprachen wie beispielsweise C:
    x = y = z ist gleichbedeutend mit x = (y = z), das heißt, der Variablen y wird zunächst der Wert von z zugewiesen und das Ergebnis dieser Zuweisung (das gleich dem zugewiesenen Wert ist) anschließend x zugewiesen.

Programmiersprachen[Bearbeiten | Quelltext bearbeiten]

In Programmiersprachen, die Seiteneffekte in Ausdrücken erlauben, ist die Reihenfolge, in der diese Seiteneffekte ausgeführt/wirksam werden, von Bedeutung. Einige Programmiersprachen legen diese Auswertungsreihenfolge strikt fest, andere (wie z. B. C oder C++) lassen die Auswertungsreihenfolge bei den meisten Infix-Operanden undefiniert. Beispiel:

int f1(void);
int f2(void);
int f3(void);
int g(int);

int h(void) {
  return g( f1() - f2() - f3() );
}
Es ist nicht definiert, ob zuerst f1, f2 oder f3 ausgeführt werden (und damit ihre Seiteneffekte wirksam werden). Dagegen ist festgeschrieben, dass g erst aufgerufen wird, nachdem f1, f2 und f3 (mit ihren Seiteneffekten) beendet sind. Das Argument von g ist identisch zu (f1()-f2()) - f3().

Siehe auch[Bearbeiten | Quelltext bearbeiten]

Einzelnachweise[Bearbeiten | Quelltext bearbeiten]

  1. Rochester Institute of Technology: Order of operations
  2. Education Place: The Order of Operations
  3. Khan Academy: The Order of Operations (Video, ab 05:40)
  4. Virginia Department of Education: Using Order of Operations and Exploring Properties, Absatz 9
  5. Technische Universität Chemnitz: Vorrangregeln und Assoziativität
  6. Western Michigan University: Rules for Exponents and the Reasons for Them