Wikipedia · einfach zusammengefasst · Stand
Operatorrangfolge
Rangfolge unterschiedlicher Operatoren · Potenzierung · Multiplikation und Division („Punktrechnung“) · Addition und Subtraktion („Strichrechnung“).
Inhalt5 Abschnitte
Begriff und Zweck
Die Operatorrangfolge, auch Operatorwertigkeit, Operatorpriorität oder Präzedenz genannt, ist in Mathematik, Logik und Informatik eine festgelegte Halbordnung für Operatoren in Infix-Schreibweise. Sie bestimmt, wie ein Ausdruck ohne vollständig ausgeschriebene Klammern zu gliedern ist.
Sie ist keine Totalordnung: Nicht zwischen allen Operatoren muss eine strikte Rangfolge bestehen, und mehrere Operatoren können denselben Rang haben. Beispielsweise besitzen Multiplikation und Division in der Arithmetik denselben Rang; beide stehen über Addition und Subtraktion. Daher gilt „Punktrechnung vor Strichrechnung“.
Die Rangfolge spart Klammern: a+b·c bedeutet a+(b·c), weil die Multiplikation stärker bindet als die Addition. Für andere Anwendungen derselben Operatorsymbole können jedoch andere Rangordnungen gelten. Bei nicht-kommutativen Operatoren muss zusätzlich bestimmt werden, wie aufeinanderfolgende gleichrangige Operationen geklammert werden.
Prioritäten verschiedener Operatoren
Für die üblichen Rechenoperationen gilt in absteigender Priorität:
- Potenzierung
- Multiplikation und Division („Punktrechnung“)
- Addition und Subtraktion („Strichrechnung“)
Programmiersprachen und Programme zur Formelauswertung, etwa das Unix-Dienstprogramm bc, verwenden weitere Kategorien. Das Vorzeichen hat dort gewöhnlich eine höhere Priorität als die Potenzierung. Deshalb wird -a^b in mathematischen Formeln als -(a^b), in solchen Auswertungsprogrammen jedoch häufig als (-a)^b gelesen.
In der Logik wird nicht immer eine Rangfolge festgelegt. Wenn eine verwendet wird, lautet sie meistens in absteigender Priorität:
- Negation, also logisches NICHT
- Konjunktion, also logisches UND
- Disjunktion, also logisches ODER
- Konditional
- Bikonditional
Diese Reihenfolge gilt auch für Boolesche Operatoren vieler Programmiersprachen.
Anwendung der Rangfolge
Der arithmetische Ausdruck 3+4·5^(-6) wird nach den üblichen Prioritäten als 3+(4·(5^(-6))) ausgewertet.
Beim logischen Ausdruck P↔Q→R∨¬S∧T bindet zuerst die Negation, danach die Konjunktion, dann die Disjunktion, das Konditional und zuletzt das Bikonditional. Die vollständige Gliederung lautet daher P↔(Q→(R∨((¬S)∧T))).
Assoziativität gleichrangiger Operatoren
Die Assoziativität bestimmt die Richtung der impliziten Klammerung, wenn gleichrangige Operatoren nebeneinanderstehen. Ein Operator heißt linksassoziativ, wenn A op B op C op D als ((A op B) op C) op D gelesen wird. Er heißt rechtsassoziativ, wenn der Ausdruck A op (B op (C op D)) bedeutet.
Die Potenzierung ist rechtsassoziativ: a^(b^(c^d)) ist nicht gleich ((a^b)^c)^d. Auch der Doppel-Pfeiloperator ist rechtsassoziativ: a↑↑b↑↑c bedeutet a↑↑(b↑↑c) und nicht (a↑↑b)↑↑c.
Addition und Subtraktion werden linksassoziativ behandelt. Beispielsweise gilt a-b+c=(a-b)+c. Außerhalb der Mathematik, etwa in Programmiersprachen oder Microsoft Excel, können andere Konventionen gelten.
Klammern, andere Schreibweisen und Auswertungsreihenfolge
Gliederungszeichen verändern eine festgelegte Operatorrangfolge oder machen einen Ausdruck eindeutig, wenn keine Rangfolge definiert ist. In Mathematik und moderner Logik verwendet man dafür Klammern.
In älteren logischen Schreibweisen kamen Punktierungssysteme vor. Im durch die Principia Mathematica verbreiteten System ersetzten Punkte gedachte Klammern an Junktoren, also logischen Verknüpfungszeichen. So konnte (A∨B)∧(C∨D) als A∨B .∧. C∨D geschrieben werden. Trafen mehrere gedachte Klammern zusammen, verwendete man mehrere Punkte. Ein anderes System setzte Punkte über Junktoren: Je mehr Punkte ein Operator trug, desto schwächer war seine Bindungsstärke und desto niedriger seine Priorität.
Programmiersprachen legen häufig Priorität und Assoziativität für alle Operatoren fest, damit Ausdrücke auch ohne Klammern syntaktisch eindeutig bleiben. Die Operatorrangfolge betrifft normalerweise nur die Infix-Notation. In der polnischen und der umgekehrten polnischen Notation sind Ausdrücke auch ohne Klammern und Rangfolgeregeln eindeutig. Das gilt ebenfalls für die Begriffsschriftnotation und graphische Schreibweisen wie die Existential Graphs.
Von der syntaktischen Operatorrangfolge zu unterscheiden ist die Auswertungsreihenfolge: Sie bestimmt, wann Teilausdrücke tatsächlich ausgeführt werden und ihre Nebenwirkungen („side effects“) eintreten. Java legt diese Reihenfolge strikt fest; C und C++ lassen sie bei den meisten Infix-Operanden undefiniert. Im Ausdruck f3(f1() * f2()) ist daher nicht festgelegt, ob f1 oder f2 zuerst ausgeführt wird. Fest steht aber, dass f3 erst aufgerufen wird, nachdem f1 und f2 beendet sind.