C # Prednosť a asociatívnosť operátorov: Definícia a príklady

V tomto tutoriáli sa dozvieme o prioritách a asociativite operátorov v C #. Takto získate predstavu o tom, ako je výraz vyhodnotený kompilátorom C #.

Prednosť operátora C #

Prednosť operátora je sada pravidiel, ktorá definuje, ako sa výraz hodnotí. V C # má každý operátor C # priradenú prioritu a na základe týchto priorít sa vyhodnotí výraz.

Napríklad prednosť (*)operátora násobenia je vyššia ako prednosť pred (+)operátorom sčítania . Preto sa pred pridaním vykoná operácia zahŕňajúca násobenie.

Zoznámte sa s vyhlásením uvedeným nižšie.

 int x = 4 + 3 * 5;

Aká bude hodnota x po vykonaní tohto príkazu?

Operand 3je spojený s +a *. Ako už bolo uvedené, násobenie má vyššiu prednosť ako sčítanie. Takže operácia 3 * 5sa vykonáva namiesto 4 + 3. Hodnota premennej x bude 19.

Ak by malo pridanie vyššiu prioritu, 4 + 3vyhodnotilo by sa to najskôr a hodnota x by bola 35.

Tabuľka predností operátora

Čím vyššia je prednosť operátora, tým vyššia je v tabuľke

Prednosť operátora C #
Kategória Operátorov
Prírastok a pokles Postfixu ++, -
Prírastok, zníženie a unárne prefixu ++, -, +, -,!, ~
Multiplikatívne *, /,%
Aditívne +, -
Posun <>
Relačné <,,> =
Rovnosť ==,! =
Bitové AND &
Bitový XOR ^
Bitové ALEBO |
Logické AND &&
Logické ALEBO ||
Ternárne ? :
Postúpenie =, + =, - =, * =, / =,% =, & =, | =, =, <> =

Operátory priradenia majú najnižšiu prioritu, zatiaľ čo operátory prírastku a zníženia postfixu majú najvyššiu prioritu.

Príklad 1: Prednosť operátora

 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); ) ) ) 

Keď spustíme program, výstup bude:

 19 Falošné

Poďme pochopiť, ako sa výraz hodnotí v programe.

Prednosť --a ++je vyššia ako *a prednosť *je vyššia ako -. Preto vyhlásenie,

 výsledok1 = --a * b - ++ c;

je ekvivalentné k

 výsledok1 = ((--a) * b) - (++ c);

Výraz v zátvorkách sa vždy vyhodnotí ako prvý bez ohľadu na to, aké sú prednosti operátorov mimo neho.

  • Najskôr sa (--a) vyhodnotí s výsledkom 4.
  • Potom sa vyhodnotí (++ c), výsledkom je 5.
  • Teraz je vyhodnotené (a * b), výsledkom je 24.
  • Nakoniec sa vykoná odčítanie, ktoré vedie k 19.
  • Konečná hodnota result1 teda bude 19.

V ďalšom výraze je prednosť pred +vyššia ako >=. Takže, c a a sa pridá ako prvé a súčet sa porovná s b, aby sa vytvoril false.

Asociativita operátorov v C #

V predchádzajúcej časti sme hovorili o prednosti operátora. Ak sa použijú dva operátory s rôznou prednosťou, vyhodnotí sa najskôr operátor s vyššou prioritou.

Čo však v prípade, ak majú obaja operátori rovnaké prednosť?

V takom prípade sa výraz hodnotí na základe asociativity operátora (zľava doprava alebo sprava doľava).

Napríklad:

int a = 5, b = 6, c = 3; int výsledok = a * b / c;

Tu, ako *a /majú rovnakú prioritu. Ale pretože asociatívnosť týchto operátorov je zľava doprava , a * bhodnotí sa najskôr a potom sa uskutoční delenie. Konečný výsledok tohto výrazu bude 10.

V tomto konkrétnom príklade na asociativite vlastne nezáleží. Pretože aj keby sa delenie uskutočnilo pred násobením, výsledok by nebol ovplyvnený.

Pozrime sa na ďalší príklad.

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

Asociativita =operátora je sprava doľava . Takže hodnota c (tj. 3) Je priradená b, a potom hodnota b je priradená a. Takže po vykonaní tohto príkazu budú hodnoty a, b a c 3.

Nasledujúca tabuľka zobrazuje asociativitu operátorov C #:

C # Asociativita operátorov
Kategória Operátorov Asociatívnosť
Prírastok a pokles Postfixu ++, - Zľava doprava
Prírastok, zníženie a unárne prefixu ++, -, +, -,!, ~ Zprava doľava
Multiplikatívne *, /,% Zľava doprava
Aditívne +, - Zľava doprava
Posun <> Zľava doprava
Relačné <,,> = Zľava doprava
Rovnosť ==,! = Zľava doprava
Bitové AND & Zľava doprava
Bitový XOR ^ Zľava doprava
Bitové ALEBO | Zľava doprava
Logické AND && Zľava doprava
Logické ALEBO || Zľava doprava
Ternárne ? : Zprava doľava
Postúpenie =, + =, - =, * =, / =,% =, & =, | =, =, <> = Zprava doľava

Takmer všetci operátori majú asociativitu zľava doprava. Prevádzkovatelia, ktorí majú asociativitu sprava doľava, sú:

  • Unárne operátory
  • Operátory prírastku a zníženia prefixu
  • Ternárny operátor
  • Prevádzkovatelia pridelenia

Príklad 2: Asociativita operátorov

 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); ) ) ) 

Keď spustíme program, výstup bude:

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

Zaujímavé články...