Priorité et associativité C # des opérateurs: définition et exemples

Dans ce didacticiel, vous découvrirez la priorité des opérateurs et l'associativité en C #. Cela nous donnera une idée de la façon dont une expression est évaluée par le compilateur C #.

Priorité des opérateurs C #

La priorité des opérateurs est un ensemble de règles qui définit la manière dont une expression est évaluée. En C #, chaque opérateur C # a une priorité assignée et en fonction de ces priorités, l'expression est évaluée.

Par exemple , la priorité de l' (*)opérateur de multiplication est supérieure à la priorité de l' (+)opérateur d' addition . Par conséquent, l'opération impliquant la multiplication est effectuée avant l'addition.

Jetez un œil à la déclaration ci-dessous.

 int x = 4 + 3 * 5;

Quelle sera la valeur de x après l'exécution de cette instruction?

L'opérande 3est associé à +et *. Comme indiqué précédemment, la multiplication a une priorité plus élevée que l'addition. Ainsi, l'opération 3 * 5est effectuée à la place de 4 + 3. La valeur de la variable x sera 19.

Si l'addition avait une priorité plus élevée, 4 + 3serait évaluée en premier et la valeur de x serait 35.

Table de préséance des opérateurs

Plus la priorité de l'opérateur est élevée, plus il apparaît dans le tableau

Priorité des opérateurs C #
Catégorie Les opérateurs
Incrément et décrément de Postfix ++, -
Incrément, décrémentation et unaire du préfixe ++, -, +, -,!, ~
Multiplicatif *, /,%
Additif +, -
Décalage <>
Relationnel <,,> =
Égalité ==,! =
ET au niveau du bit &
XOR au niveau du bit ^
OU au niveau du bit |
ET logique &&
OU logique ||
Ternaire ? :
Affectation =, + =, - =, * =, / =,% =, & =, | =, =, <> =

Les opérateurs d'affectation ont la priorité la plus faible tandis que les opérateurs d'incrémentation et de décrémentation de suffixe ont la priorité la plus élevée.

Exemple 1: Priorité des opérateurs

 using System; namespace Operator ( class OperatorPrecedence ( public static void Main(string() args) ( int result1; int a = 5, b = 6, c = 4; result1 = --a * b - ++c; Console.WriteLine(result1); bool result2; result2 = b>= c + a; Console.WriteLine(result2); ) ) ) 

Lorsque nous exécutons le programme, la sortie sera:

 19 Faux

Comprenons comment l'expression est évaluée dans le programme.

La priorité de --et ++est supérieure à *, et la priorité de *est supérieure à -. D'où la déclaration,

 résultat1 = --a * b - ++ c;

est équivalent à

 résultat1 = ((--a) * b) - (++ c);

L'expression entre parenthèses est toujours évaluée en premier, quelle que soit la priorité des opérateurs à l'extérieur.

  • Au début, (--a) est évalué, ce qui donne 4.
  • Ensuite, (++ c) est évalué résultant en 5.
  • Maintenant, (a * b) est évalué résultant en 24.
  • Enfin, la soustraction est effectuée résultant en 19.
  • Par conséquent, la valeur finale de result1 sera 19.

Dans l'expression suivante, la priorité de +est supérieure à >=. Ainsi, c et a sont ajoutés en premier et la somme est comparée à b pour produire false.

Associativité des opérateurs en C #

Dans la section précédente, nous avons discuté de la priorité des opérateurs. Si deux opérateurs avec une priorité différente sont utilisés, l'opérateur avec la priorité la plus élevée est évalué en premier.

Mais que faire si les deux opérateurs ont la même priorité?

Dans ce cas, l'expression est évaluée en fonction de l'associativité de l'opérateur (de gauche à droite ou de droite à gauche).

Par exemple:

int a = 5, b = 6, c = 3; résultat int = a * b / c;

Ici, les deux *et /ont la même priorité. Mais comme l'associativité de ces opérateurs est de gauche à droite , elle a * best d'abord évaluée puis la division est effectuée. Le résultat final de cette expression sera 10.

Dans cet exemple particulier, l'associativité n'a pas vraiment d'importance. Car même si la division était effectuée avant la multiplication, le résultat ne serait pas affecté.

Jetons un œil à un autre exemple.

int a = 5, b = 6, c = 3; a = b = c;

L'associativité de l' =opérateur est de droite à gauche . Ainsi, la valeur de c (c'est-à-dire 3) est affectée à b, puis la valeur de b est affectée à a. Ainsi, après avoir exécuté cette instruction, les valeurs de a, b et c seront 3.

Le tableau ci-dessous montre l'associativité des opérateurs C #:

Associativité C # des opérateurs
Catégorie Les opérateurs Associativité
Incrément et décrément de Postfix ++, - De gauche à droite
Incrément, décrémentation et unaire du préfixe ++, -, +, -,!, ~ De droite à gauche
Multiplicatif *, /,% De gauche à droite
Additif +, - De gauche à droite
Décalage <> De gauche à droite
Relationnel <,,> = De gauche à droite
Égalité ==,! = De gauche à droite
ET au niveau du bit & De gauche à droite
XOR au niveau du bit ^ De gauche à droite
OU au niveau du bit | De gauche à droite
ET logique && De gauche à droite
OU logique || De gauche à droite
Ternaire ? : De droite à gauche
Affectation =, + =, - =, * =, / =,% =, & =, | =, =, <> = De droite à gauche

Presque tous les opérateurs ont une associativité de gauche à droite. Les opérateurs ayant une associativité de droite à gauche sont:

  • Opérateurs unaires
  • Opérateurs d'incrémentation et de décrémentation de préfixe
  • Opérateur ternaire
  • Opérateurs d'affectation

Exemple 2: Associativité des opérateurs

 using System; namespace Operator ( class OperatorPrecedence ( public static void Main(string() args) ( int a = 5, b = 6, c = 3; int result = a * b / c; Console.WriteLine(result); a = b = c; Console.WriteLine("a = (0), b = (1), c = (2)", a, b, c); ) ) ) 

Lorsque nous exécutons le programme, la sortie sera:

 10 a = 3, b = 3, c = 3

Articles intéressants...