Operatorassoziativität
aus Wikipedia, der freien Enzyklopädie
Operatorassoziativität bezeichnet vor allem in der Informatik, aber auch in Mathematik und Logik:
- 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, d.h. dass für ihn das Assoziativgesetz (a op b) op c = a op (b op c) gilt;
- 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 (a + b) + c = a + (b + c) und (a * b) * c = a * (b * c) ist. In der Logik sind zum Beispiel Konjunktion und Disjunktion assoziativ, weil einerseits und und andererseits und äquivalent sind. Nicht assoziativ sind zum Beispiel Division und Konditional, weil im Allgemeinen ist und weil und nicht äquivalent sind.
Erst bei nicht assoziativen Verknüpfungen kann das Ergebnis von der Auswertungsreihenfolge abhängen. Um zu vermeiden, dass Ausdrücke mit nebeneinander stehenden, gleichwertigen Operatoren ohne Klammerung mehrdeutig sind, wird oftmals eine Auswertungsrichtung per Konvention festgelegt:
- Ein Linksassoziativer Operator wird von links nach rechts ausgewertet.
- Ein Beispiel ist die Subtraktion: Es ist a − b − c = (a − b) − c.
- Das Konditional in der Logik wird von den meisten Autoren linksassoziativ verwendet, d.h. dass als zu lesen ist.
- Ein Rechtsassoziativer Operator wird von rechts nach links ausgewertet. Beispiele hierfür:
- Die Potenzierung in der Mathematik:
- Der Zuweisungsoperator verschiedener Programmiersprachen wie beispielsweise C:
a = b = c ist gleichbedeutend mit a = (b = c), d.h. der Variablen b wird zunächst der Wert von c zugewiesen und das Ergebnis dieser Zuweisung (das gleich dem zugewiesenen Wert ist) anschließend a zugewiesen. Diese Auswertungsmethode zu kennen, ist u.A. dann wichtig, wenn c der NULL-Pointer ist, da in diesem Fall Die Anweisunga=b=NULL;
vona=NULL;b=NULL;
verschieden ist hinsichtlich der auftretenden Zeigertypen.
Siehe auch Operatorrangfolge