Qu'est-ce que l'associativité des opérateurs et pourquoi est-il important?

StackOverflow https://stackoverflow.com/questions/930486

  •  06-09-2019
  •  | 
  •  

Question

Qu'est-ce que associativité (pour un opérateur) et pourquoi est-il important?

Mise à jour: associativité opérateur

Était-ce utile?

La solution

Pour les opérateurs, associativité signifie que lorsque le même opérateur apparaît dans une rangée, puis qui nous appliquons l'opérateur occurence d'abord. Dans ce qui suit, laissez Q être l'opérateur

a Q b Q c

Si Q reste associative, il évalue comme

(a Q b) Q c

Et si elle est associative à droite, puis il évalue comme

a Q (b Q c)

Il est important, car il change le sens d'une expression. Considérons l'opérateur de division entière avec l'arithmétique, qui est associative gauche

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

Si elle était associative droit, il évaluerait une expression non définie, puisque vous divisez par zéro

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

Autres conseils

Il existe trois types de associativité:

La propriété Associatif en mathématiques

Ordre des opérations dans les langages de programmation

associativité dans des caches CPU.

La propriété associative en mathématiques est une propriété des opérateurs tels que l'addition (+). Cette propriété permet de réarranger entre parenthèses sans changer la valeur d'une déclaration, i.e.:.

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

Dans les langages de programmation, l'associativité (ou fixité) d'un opérateur est une propriété qui détermine la façon dont les opérateurs de même priorité sont regroupés dans le absence des parenthèses; à savoir dans quel ordre chaque opérateur est évalué. Cela peut varier entre les langages de programmation.

caches du processeur, l'associativité est un procédé d'optimisation de la performance.

il est de l'ordre d'évaluer pour les opérateurs de la même priorité. La gauche à droite ou de droite à gauche les questions d'ordre. Pour

3 - 2 - 1

si elle est de gauche à droite, il est

(3 - 2) - 1

et est 0. Si elle est droite à gauche, il est

3 - (2 - 1)

et il est 2. Dans la plupart des langues, nous disons que l'opérateur moins a une GAUCHE À DROITE associativité.

Si vous faites référence à « associativité de l'opérateur » - il est comment une langue détermine la façon dont les opérateurs de même priorité sont regroupés en l'absence de parenthèses.

Par exemple, les opérateurs + et - Dans des langues C ont la même priorité. Lorsque vous écrivez une expression qui utilise les deux (sans parenthèses) le compilateur doit déterminer dans quel ordre les évaluer dans.

Si vous écrivez 12-5 + 3, les évaluations possibles sont les suivantes:

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

En fonction de l'ordre que vous évaluez l'expression, vous pouvez obtenir des résultats différents. Dans des langues C, + et - ont quitté associativité, ce qui signifie que l'expression ci-dessus serait d'évaluer que le premier cas

.

Toutes les langues ont des règles fortement définies à la fois la priorité et l'associativité. Vous pouvez en savoir plus sur les règles de C # ici . Les concepts généraux de l'opérateur associativité et de priorité sont bien couverts sur wikipedia.

Simple !!

gauche Associatif signifie que nous évaluons notre expression de gauche à droite

droit Associatif signifie que nous évaluons notre expression de droite à gauche

Nous savons *, / et% ont même priorité, mais par associativité, la réponse peut changer:

Pour exemple: Nous avons l'expression: 4 * 8/2% 5

associative gauche: (4 * 8) / 2% 5 ==> (32/2) 5% ==> 16% 5 ==> 1

associative droite: 4 * 8 / (2% 5) ==> 4 * (8/0) ==> comportement non défini

J'espère que cela aiderait.

Je suppose que vous parlez associativité de l'opérateur ...

Il est l'ordre de liaison des opérandes à un opérateur. En gros:

a - b + c

peut être évaluée comme (en supposant - et + ont la même priorité):

((a - b) + c) ou,
(A - (b + c))

Si les opérateurs sont laissés associatif (lier immédiatement à l'opérande gauche), il sera évalué comme la première. Si elles sont associatives droit, il sera évalué comme le second.

Si vous voulez dire associativité de l'opérateur:

Il définit les expressions façon sont analysées. Il donne une norme, de sorte que chaque expression est analysée de la même manière.

Il est surtout important pour les opérations qui ont la même precedense, quand il pourrait y avoir des effets secondaires.

La plupart des exemples précédents ont utilisé des constantes. Si les arguments se trouvent les appels de fonction, l'ordre que les appels sont effectués en peuvent être déterminées par les règles d'association, en fonction bien sûr de votre compilateur. Et si ces fonctions ont des effets secondaires ..

Nous savons tous que la priorité est important, mais est associativité pour interpréter le sens d'une expression. Pour une intro très simple essayer puissance des opérateurs .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top