Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> Langue C

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

Priorité des opérateurs C#
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# :

Associativité C# des opérateurs
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

  1. Mots-clés et identifiants C#
  2. Opérateurs C#
  3. Opérateur C# ternaire (? :)
  4. Classe et objet C#
  5. Classe abstraite et méthode C#
  6. Classe partielle C# et méthode partielle
  7. Classe et méthode scellées C#
  8. Opérateurs en C++ avec exemple :qu'est-ce que c'est, les types et les programmes
  9. C - Constantes et littéraux