Was ist Assoziativität (für einen Operator) und warum ist sie wichtig?
Aktualisiert: Operatorassoziativität
associativity
Unpolarität
quelle
quelle
Antworten:
Assoziativität bedeutet für Operatoren, dass, wenn derselbe Operator in einer Reihe erscheint, zuerst das Auftreten des Operators angewendet wird. Im Folgenden sei
Q
der OperatorWenn
Q
es assoziativ bleibt, wird es als ausgewertetUnd wenn es richtig assoziativ ist, dann bewertet es als
Es ist wichtig, da es die Bedeutung eines Ausdrucks ändert. Betrachten Sie den Divisionsoperator mit ganzzahliger Arithmetik, die assoziativ bleibt
Wenn es richtig assoziativ wäre, würde es zu einem undefinierten Ausdruck ausgewertet, da Sie durch Null teilen würden
quelle
expr -> expr + term;
ist links assoziativ undexpr -> term + expr
ist rechts assoziativ.a * b / c
bewertet, ob*
linksassoziativ, aber rechtsassoziativ/
wäre? Dann gibt es einen Widerspruch. Ich denke also, man muss sagen "wenn Operatoren mit der gleichen Priorität und Assoziativität", wenn Sie mehrere Operatoren abdecken möchten.Es gibt drei Arten von Assoziativität:
Die assoziative Eigenschaft in der Mathematik
Reihenfolge der Operationen in Programmiersprachen
Assoziativität in CPU-Caches.
Die assoziative Eigenschaft in der Mathematik ist eine Eigenschaft von Operatoren wie Addition (+). Mit dieser Eigenschaft können Sie Klammern neu anordnen, ohne den Wert einer Anweisung zu ändern.
In Programmiersprachen ist die Assoziativität (oder Fixität) eines Operators eine Eigenschaft, die bestimmt, wie Operatoren mit derselben Priorität ohne Klammern gruppiert werden . dh in welcher Reihenfolge jeder Bediener ausgewertet wird. Dies kann zwischen den Programmiersprachen unterschiedlich sein.
In CPU-Caches ist Assoziativität eine Methode zur Leistungsoptimierung.
quelle
Einfach!!
Wir wissen, dass *, / und% dieselbe Priorität haben, aber gemäß der Assoziativität kann sich die Antwort ändern:
Zum Beispiel: Wir haben Ausdruck: 4 * 8/2% 5
quelle
2 % 5
bewertet zu2
, nicht0
.Wenn Sie sich auf "Operatorassoziativität" beziehen, bestimmt eine Sprache, wie Operatoren mit derselben Priorität ohne Klammern gruppiert werden.
Beispielsweise haben die Operatoren + und - in C-basierten Sprachen dieselbe Priorität. Wenn Sie einen Ausdruck schreiben, der beide verwendet (ohne Klammern), muss der Compiler bestimmen, in welcher Reihenfolge sie ausgewertet werden sollen.
Wenn Sie 12 - 5 + 3 schreiben, umfassen die möglichen Bewertungen:
Abhängig von der Reihenfolge, in der Sie den Ausdruck auswerten, können Sie unterschiedliche Ergebnisse erzielen. In C-basierten Sprachen haben + und - Assoziativität hinterlassen, was bedeutet, dass der obige Ausdruck als erster Fall ausgewertet wird.
Alle Sprachen haben stark definierte Regeln für Vorrang und Assoziativität. Weitere Informationen zu den Regeln für C # finden Sie hier. Die allgemeinen Konzepte der Operator Assoziativität und Vorrang sind gut auf wikipedia abgedeckt.
quelle
Dies ist die Bewertungsreihenfolge für Operatoren mit derselben Priorität. Die Reihenfolge LINKS NACH RECHTS oder RECHTS NACH LINKS ist wichtig. Zum
Wenn es von links nach rechts ist, dann ist es
und ist 0. Wenn es RECHTS nach LINKS ist, dann ist es
und es ist 2. In den meisten Sprachen sagen wir, dass der Minusoperator eine Assoziativität von LINKS NACH RECHTS hat.
Update 2020:
Die Situation
3 - 2 - 1
mag trivial erscheinen, wenn die Behauptung lautet: "Natürlich machen wir das von links nach rechts". In anderen Fällen, z. B. in Ruby oder NodeJS:Der
**
ist "zur Macht von" Betreiber. Die Assoziativität ist von rechts nach links. Und es istdas heißt
2 ** 9
, dh512
stattdas heißt
8 ** 2
, dh64
.quelle
Ich nehme an, Sie meinen Operatorassoziativität ...
Es ist die Reihenfolge der Bindung von Operanden an einen Operator. Grundsätzlich:
a - b + c
könnte bewertet werden als (vorausgesetzt - und + haben die gleiche Priorität):
((a - b) + c) oder
(a - (b + c))
Wenn Operatoren assoziativ bleiben (sofort an den linken Operanden binden), wird dies als erster ausgewertet. Wenn sie richtig assoziativ sind, wird sie als zweite ausgewertet.
quelle
Wenn Sie Operatorassoziativität meinen:
Es definiert die Art und Weise, wie Ausdrücke analysiert werden. Es gibt einen Standard, sodass jeder Ausdruck auf die gleiche Weise analysiert wird.
Es ist vor allem bei Operationen mit der gleichen Priorität wichtig, wenn Nebenwirkungen auftreten können.
quelle
Die meisten vorherigen Beispiele haben Konstanten verwendet. Wenn es sich bei den Argumenten zufällig um Funktionsaufrufe handelt, kann die Reihenfolge, in der die Aufrufe ausgeführt werden, durch die Zuordnungsregeln bestimmt werden, natürlich abhängig von Ihrem Compiler. Und wenn diese Funktionen Nebenwirkungen haben ..
quelle
Wir alle wissen, dass Vorrang wichtig ist, aber auch Assoziativität bei der Interpretation der Bedeutung eines Ausdrucks. Versuchen Sie für eine wirklich einfache Einführung Power of Operators .
quelle
Die Assoziativität fällt in den Programmiersprachenkonzepten unter die Reihenfolge der Berechnung. Die Reihenfolge der Berechnung bestimmt die Bedeutung des Ausdrucks. Es gibt zwei Hauptregeln:
Prioritätsregeln definieren die Reihenfolge, in der "benachbarte" Operatoren verschiedener Typen ausgewertet werden. Jede Programmiersprache hat eine eigene Operator-Prioritätstabelle für ihre Operatoren.
Zurück zur Assoziativität,
Es definiert die Ausführungsreihenfolge benachbarter Operationen mit derselben Priorität. Es hat 3 Geschmacksrichtungen,
Wenn ein Operator linksassoziativ ist, wird er ebenfalls von links nach rechts ausgewertet. Wenn er rechtsassoziativ ist, wird er von rechts nach links ausgewertet.
quelle