2009-05-30 17 views
61

Was ist Assoziativität (für einen Operator) und warum ist es wichtig?Was ist Assoziativität von Operatoren und warum ist es wichtig?

Aktualisiert: Operatorassoziativität

+2

Welche Art von Assoziativität? Operator-Assoziativität? – Ikke

+1

-1: vage. Irgendwelche Hinweise auf den Kontext oder was willst du wissen? –

+16

@Neil Butterworth - Das ist ein besonders harscher Kommentar für das, was wie eine vernünftige Frage scheint. Der ganze Sinn der Website ist es, ein zentrales Repository für ALLE Programmierkenntnisse einschließlich der in Einführungstexten behandelten Themen zu sein. Sie kommentieren @ Jian Lins Antwort auf seinen eigenen Kommentar, der ebenfalls akzeptabel ist, wie in der ersten Frage der offiziellen FAQ dargelegt. Jemand mit deinem Wiederholungslevel sollte es besser wissen. Wenn Sie damit nicht einverstanden sind, seien Sie zumindest höflich. –

Antwort

65

Assoziatoren bedeutet für Operatoren, dass wenn der gleiche Operator in einer Zeile erscheint, zuerst das Operator-Ereignis angewendet wird.Im Folgenden lassen Q der Betreiber sein

a Q b Q c 

Wenn Q links assoziativ ist, wertet es als

(a Q b) Q c 

Und wenn es richtig ist assoziativ, wertet es als

a Q (b Q c) 

Es ist wichtig, da es die Bedeutung eines Ausdrucks ändert. Betrachten Sie den Divisions-Operator mit Integer-Arithmetik, die assoziativ bleibt

4/2/3 <=> (4/2)/3 <=> 2/3  = 0 

Wenn es richtig assoziativen waren, es auf eine nicht definierte Ausdruck auswerten würde, da man von Null

4/2/3 <=> 4/(2/3) <=> 4/0  = undefined 
+0

Wissen Sie, wie Assoziativität zu finden ist ist links oder rechts für gegebene grammer? – user2510115

+1

Wenn die Grammatik eine rekursive Produktionsregel für Links/Rechts hat. –

+0

Zum Beispiel 'expr -> expr + term;' ist links assoziativ und 'expr -> term + expr' ist rechts assoziativ. –

2

Ich nehme an, Sie Operatorassoziativität meine ...

Es ist der Auftrag an einen Betreiber von Operanden zu binden. Grundsätzlich gilt:

a - b + c

könnte als (unter der Annahme - und + haben die gleiche Priorität) bewertet werden:

((a - b) + c) oder,
(a - (b + c))

Wenn Operatoren assoziativ bleiben (binden Sie sie sofort an den linken Operanden), werden sie als erste ausgewertet. Wenn sie richtig assoziativ sind, wird sie als zweite ausgewertet.

7

Es gibt drei Arten von Assoziativität:

The Associative property in mathematics

Order of Operations in programming languages

Associativity in CPU caches.

Die assoziative Eigenschaft in der Mathematik ist eine Eigenschaft von Operatoren wie Addition (+). Diese Eigenschaft ermöglicht es Ihnen, Klammern ohne Änderung der Wert einer Anweisung neu zu ordnen, das heißt:

(a + b) + c = a + (b + c) 

In Programmiersprachen, die Assoziativität (oder fixity) eines Betreibers eine Eigenschaft ist, die wie die Betreiber von gleicher Priorität bestimmt werden gruppiert in der Abwesenheit der Klammern; d. h. in welcher Reihenfolge jeder Bediener bewertet wird. Dies kann zwischen den Programmiersprachen unterschiedlich sein.

In CPU-Caches ist die Assoziativität eine Methode zur Optimierung der Leistung.

+0

* Die Assoziativität (oder Fixität) eines Operators ist eine Eigenschaft, die bestimmt, wie Operatoren mit der gleichen Priorität in Abwesenheit von Klammern gruppiert werden * - diese Phrase war einfach perfekt, um mich zu verstehen –

1

Wenn Sie Operatorassoziativität bedeuten:

Es definiert die Art und Weise Ausdrücke analysiert werden. Es gibt einen Standard, so dass jeder Ausdruck auf die gleiche Weise geparst wird.

Es ist vor allem wichtig für Operationen, die die gleiche Präzedenz haben, wenn es zu Nebenwirkungen kommen kann.

3

ist es der Auftrag teilen würde für Betreiber mit der gleichen Priorität bewerten. Die Reihenfolge LINKS NACH RECHTS oder RECHTS NACH LINKS ist wichtig. Für

3 - 2 - 1 

wenn es links nach rechts, dann ist es

(3 - 2) - 1 

und ist 0. Wenn es rechts nach links ist, dann ist es

3 - (2 - 1) 

und es ist 2 In den meisten Sprachen sagen wir, dass der Minus-Operator eine LINKS-NACH-RECHTS-Assoziativität hat.

+3

Wenn Sie die Antwort bereits wusste, warum hat dann fragen Sie die Frage? –

+2

war es um neue Leute zu helfen. Ich erinnere mich daran, vor langer Zeit C gelernt zu haben und wusste erst später, was Assoziativität wirklich war. –

+3

Ich vermute, dass die meisten Leute, die C lernen, auf deine "Hilfe" verzichten können. –

4

Wenn Sie sich auf "Operator-Assoziativität" beziehen - so bestimmt eine Sprache, wie Operatoren derselben Priorität in Abwesenheit von Klammern gruppiert werden.

Zum Beispiel haben die Operatoren + und - in C-basierten Sprachen die gleiche Priorität. . Wenn Sie einen Ausdruck schreiben, die beide verwendet (ohne Klammern) der Compiler bestimmen müssen, was um sie in zu bewerten

Wenn Sie 12 schreiben - 5 + 3, sind die möglichen Bewertungen:

  1. (12 - 5) + 3 = 10
  2. 12 - (5 + 3) = 4

in der Größenordnung Sie den Ausdruck auswerten Je in, können Sie unterschiedliche Ergebnisse erhalten. In C-basierten Sprachen haben + und - Assoziativität verlassen, was bedeutet, dass der obige Ausdruck den ersten Fall auswerten würde.

Alle Sprachen haben streng definierte Regeln für Präzedenz und Assoziativität. Sie können hier mehr über die Regeln für C# erfahren. Die allgemeinen Konzepte des Operators associativity und precedence sind in Wikipedia gut abgedeckt.

+0

Ihre Beispiele wären klarer, wenn sie alle dieselben Operanden verwenden würden. –

+0

Was würde passieren, wenn zwei Operatoren mit der gleichen Priorität in einem Ausdruck ohne Klammern erscheinen, aber einer von ihnen Assoziativität und der andere Recht behalten hat? Würde es nur die Assoziativität benutzen, die der Operator zuerst findet? – Hector

0

Die meisten der vorherigen Beispiele haben Konstanten verwendet. Wenn es sich bei den Argumenten um Funktionsaufrufe handelt, kann die Reihenfolge, in der die Aufrufe ausgeführt werden, durch die Zuordnungsregeln bestimmt werden, abhängig natürlich von Ihrem Compiler. Und wenn diese Funktionen Nebenwirkungen haben ..

0

Wir alle wissen, dass Vorrang ist wichtig, aber so ist die Assoziativität bei der Interpretation der Bedeutung eines Ausdrucks.Für ein wirklich einfaches Intro versuchen Sie Power of Operators.

2

Einfach !! Links Assoziativ bedeutet, dass wir unseren Ausdruck von links nach rechts auswerten.

Rechts assoziativ bedeutet, dass wir unseren Ausdruck von rechts nach links bewerten.

Wir wissen, dass *,/und% die gleiche Priorität haben, aber laut Assoziativität kann sich die Antwort ändern.

Zum Beispiel: Ich habe exp: 4 * 8/2% 5

Left assoziative: (4 * 8)/2% 5 ==> (32/2) 5% ==> 16 % 5 ==> 1

Recht assoziativ: 4 * 8/(2% 5) ==> 4 * (8/0) ==> undefiniertes Verhalten

ich hoffe, dass dies helfen würde. . .

Verwandte Themen