Priorité et associativité des opérateurs C#
Priorité et associativité des opérateurs C#
Dans ce didacticiel, nous vous expliquerons la priorité et l'associativité des opérateurs 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éfinissent comment 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 la multiplication (*)
l'opérateur est supérieur à la priorité de l'addition (+)
opérateur. 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 avoir exécuté cette instruction ?
L'opérande 3
est associé à +
et *
. Comme indiqué précédemment, la multiplication a une priorité plus élevée que l'addition. Donc, l'opération 3 * 5
est effectué à la place de 4 + 3
. La valeur de la variable x sera 19
.
Si l'ajout aurait une priorité plus élevée, 4 + 3
serait évalué en premier et la valeur de x serait 35
.
Tableau de priorité des opérateurs
Plus la priorité de l'opérateur est élevée, plus il apparaît haut dans le tableau
Catégorie | Opérateurs |
---|---|
Incrémentation et décrémentation de suffixe | ++, -- |
Incrémentation, décrémentation et unaire des préfixes | ++, --, +, -, !, ~ |
Multiplicatif | *, /, % |
Additif | +, - |
Maj | <<,>> |
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 suffixés 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 False
Comprenons comment l'expression est évaluée dans le programme.
La priorité de --
et ++
est supérieur à *
, et priorité de *
est supérieur à -
. D'où la déclaration,
result1 = --a * b - ++c;
est équivalent à
result1 = ((--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é et donne
4
.
- Puis (++c) est évalué et donne
5
.
- Maintenant, (a * b) est évalué et donne
24
.
- Enfin, la soustraction est effectuée résultant en
19
.
- D'où la valeur finale de result1 sera
19
.
Dans l'expression suivante, la priorité de +
est supérieur à >=
. Donc, c et un est ajouté 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 de priorité différente sont utilisés, l'opérateur de priorité la plus élevée est évalué en premier.
Mais que se passe-t-il 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; int result = a * b / c;
Ici, les deux *
et /
ont la même priorité. Mais puisque l'associativité de ces opérateurs est de gauche à droite , a * b
est évalué en premier, 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. Parce que même si la division était effectuée avant la multiplication, le résultat ne serait pas affecté.
Prenons un autre exemple.
int a = 5, b = 6, c = 3; a = b = c;
L'associativité de =
l'opérateur va de droite à gauche . Donc la valeur de c (c'est-à-dire 3
) est affecté à b , puis la valeur de b est attribué à a . Ainsi, après avoir exécuté cette instruction, les valeurs de a , b et c sera 3
.
Le tableau ci-dessous montre l'associativité des opérateurs C# :
Catégorie | Opérateurs | Associativité |
---|---|---|
Incrémentation et décrémentation de suffixe | ++, -- | De gauche à droite |
Incrémentation, décrémentation et unaire des préfixes | ++, --, +, -, !, ~ | De droite à gauche |
Multiplicatif | *, /, % | De gauche à droite |
Additif | +, - | De gauche à droite |
Maj | <<,>> | 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 l'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
Langue C
- Mots-clés et identifiants C#
- Opérateurs C#
- Opérateur C# ternaire (? :)
- Classe et objet C#
- Classe abstraite et méthode C#
- Classe partielle C# et méthode partielle
- Classe et méthode scellées C#
- Opérateurs en C++ avec exemple :qu'est-ce que c'est, les types et les programmes
- C - Constantes et littéraux