C # Precedence and Associativity of Operators: Definition and examples

V tomto kurzu se dozvíte o prioritě operátora a asociativitě v C #. To nám dá představu o tom, jak je výraz vyhodnocen kompilátorem C #.

Přednost operátora C #

Priorita operátora je sada pravidel, která definují, jak je výraz vyhodnocen. V C # má každý operátor C # přiřazenou prioritu a na základě těchto priorit je výraz vyhodnocen.

Například priorita (*)operátoru násobení je vyšší než priorita (+)operátoru přidání . Proto se operace zahrnující násobení provádí před přidáním.

Podívejte se na prohlášení níže.

 int x = 4 + 3 * 5;

Jaká bude hodnota x po provedení tohoto příkazu?

Operand 3je spojen s +a *. Jak již bylo řečeno, násobení má vyšší prioritu než sčítání. Operace 3 * 5se tedy provádí místo 4 + 3. Hodnota proměnné x bude 19.

Pokud by přidání mělo vyšší prioritu, 4 + 3vyhodnotilo by se to nejprve a hodnota x by byla 35.

Tabulka priorit operátora

Čím vyšší je priorita operátoru, tím vyšší je v tabulce

Přednost operátora C #
Kategorie Operátoři
Přírůstek a pokles Postfixu ++, -
Přírůstek, snížení a unární prefix ++, -, +, -,!, ~
Multiplikativní *, /,%
Přísada +, -
Posun <>
Relační <,,> =
Rovnost ==,! =
Bitové AND &
Bitový XOR ^
Bitové NEBO |
Logické AND &&
Logické NEBO ||
Trojice ? :
Úkol =, + =, - =, * =, / =,% =, & =, | =, =, <> =

Operátory přiřazení mají nejnižší prioritu, zatímco operátory přírůstku a zmenšení postfixu mají nejvyšší prioritu.

Příklad 1: Přednost 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); ) ) ) 

Když spustíme program, výstup bude:

 19 Nepravda

Pojďme pochopit, jak je výraz v programu vyhodnocen.

Priorita --a ++je vyšší než *a priorita *je vyšší než -. Proto prohlášení,

 result1 = --a * b - ++ c;

je ekvivalentní k

 result1 = ((--a) * b) - (++ c);

Výraz uvnitř závorek je vždy vyhodnocen jako první bez ohledu na to, jaké jsou přednosti operátorů mimo něj.

  • Nejprve se vyhodnotí (--a), což má za následek 4.
  • Poté se vyhodnotí (++ c), což má za následek 5.
  • Nyní je (a * b) vyhodnoceno a výsledkem je 24.
  • Nakonec se provede odečtení, které vede k 19.
  • Konečná hodnota result1 proto bude 19.

V dalším výrazu je priorita +vyšší než >=. Takže nejprve se přidá c a a součet se porovná s b, aby se vytvořil false.

Asociativita operátorů v C #

V předchozí části jsme probrali prioritu operátorů. Pokud jsou použity dva operátory s odlišnou prioritou, je nejprve vyhodnocen operátor s vyšší prioritou.

But what if both the operators have same precedence?

In such case, the expression is evaluated based on the associativity of operator (left to right or right to left).

For example:

 int a = 5, b = 6, c = 3; int result = a * b / c;

Here, both * and / have the same precedence. But since the associativity of these operators is from left to right, a * b is evaluated first and then division is carried out. The final result of this expression will be 10.

In this particular example, the associativity does not really matter. Because even if division was carried out before multiplication, the result would be unaffected.

Let's take a look at another example.

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

Asociativita =operátoru je zprava doleva . Takže hodnota c (tj. 3) Je přiřazena b, a pak je hodnota b přiřazena a. Takže po provedení tohoto příkazu budou hodnoty a, b a c 3.

Tabulka níže ukazuje asociativitu operátorů C #:

C # Asociativita operátorů
Kategorie Operátoři Asociativita
Přírůstek a pokles Postfixu ++, - Zleva do prava
Přírůstek, snížení a unární prefix ++, -, +, -,!, ~ Zprava doleva
Multiplikativní *, /,% Zleva do prava
Přísada +, - Zleva do prava
Posun <> Zleva do prava
Relační <,,> = Zleva do prava
Rovnost ==,! = Zleva do prava
Bitové AND & Zleva do prava
Bitový XOR ^ Zleva do prava
Bitové NEBO | Zleva do prava
Logické AND && Zleva do prava
Logické NEBO || Zleva do prava
Trojice ? : Zprava doleva
Úkol =, + =, - =, * =, / =,% =, & =, | =, =, <> = Zprava doleva

Téměř všichni operátoři mají asociativitu zleva doprava. Operátoři, kteří mají asociativitu zprava doleva, jsou:

  • Unární operátoři
  • Operátoři přírůstku a snížení prefixu
  • Ternární operátor
  • Operátoři přiřazení

Příklad 2: Asociativita operátorů

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

Když spustíme program, výstup bude:

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

Zajímavé články...