Az operátorok C # elsőbbsége és asszociativitása: meghatározás és példák

Ebben az oktatóanyagban megismerheti a C # operátor elsőbbségét és asszociativitását. Ez képet ad nekünk arról, hogyan értékel egy kifejezést a C # fordító.

C # Operátor elsőbbség

Az operátori elsőbbség olyan szabálykészlet, amely meghatározza, hogy egy kifejezést hogyan kell értékelni. A C # -ban minden C # operátornak van hozzárendelt prioritása, és ezek alapján a kiértékelés kiértékelődik.

Például a szorzó (*)operátor elsőbbsége magasabb, mint az összeadás (+)operátor elsőbbsége . Ezért a szaporítással járó műveletet az összeadás előtt hajtják végre.

Vessen egy pillantást az alábbi nyilatkozatra.

 int x = 4 + 3 * 5;

Mekkora lesz x értéke ennek az utasításnak a végrehajtása után?

A operandus 3társul +, és *. Mint korábban említettük, a szorzásnak nagyobb az elsőbbsége, mint az összeadásnak. Tehát a műveletet 3 * 5helyett 4 + 3. A változó értéke x lesz 19.

Ha az összeadásnak nagyobb az elsőbbsége, 4 + 3akkor először kiértékelésre kerül, és x értéke meg lesz 35.

Operátor elsőbbségi táblázat

Minél nagyobb az operátor elsőbbsége, annál magasabb jelenik meg a táblázatban

C # Operátor elsőbbség
Kategória Operátorok
Postfix növekmény és csökkentés ++, -
Prefix Increment, Decrement és Unary ++, -, +, -,!, ~
Szorzó *, /,%
Adalékanyag +, -
Váltás <>
Relációs <,,> =
Egyenlőség ==,! =
Bitenkénti ÉS &
Bitenként XOR ^
Bitenként VAGY |
Logikai ÉS &&
Logikai VAGY ||
Hármas ? :
Feladat =, + =, - =, * =, / =,% =, & =, | =, =, <> =

A hozzárendelési operátoroknak van a legkisebb elsőbbségük, míg a postfix növekményének és csökkentésének operátorainak van a legnagyobb prioritása.

1. példa: Operátor elsőbbség

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

A program futtatásakor a kimenet a következő lesz:

 19 Hamis

Értsük meg, hogyan értékelik a kifejezést a programban.

Az elsőbbsége --és ++magasabb, mint *, és elsőbbsége *magasabb, mint -. Ezért a kijelentés,

 eredmény1 = --a * b - ++ c;

egyenértékű

 eredmény1 = ((--a) * b) - (++ c);

A zárójelben lévő kifejezést mindig először értékelik, függetlenül attól, hogy a rajta kívüli operátorok milyen elsőbbségűek.

  • Először a (--a) értékét értékelik, amelynek eredményeként 4.
  • Ezután (++ c) értéket kapunk, amelynek eredményeként a 5.
  • Most (a * b) kiértékelését eredményezzük 24.
  • Végül kivonásra kerül sor, amelynek eredményeként a 19.
  • Ezért az eredmény1 végső értéke lesz 19.

A következő kifejezésben a fontossági sorrend +magasabb, mint >=. Tehát először c és egy adunk hozzá, és az összeget összehasonlítjuk b-vel a termeléshez false.

A C # operátorok asszociativitása

Az előző részben az operátor elsőbbségéről beszéltünk. Két különböző elsőbbségű operátor használata esetén először a magasabb prioritású operátort értékelik.

De mi van akkor, ha mindkét operátornak ugyanaz az elsőbbsége?

Ebben az esetben a kifejezést az operátor asszociativitása alapján értékelik (balról jobbra vagy jobbról balra).

Például:

int a = 5, b = 6, c = 3; int eredmény = a * b / c;

Itt mind *és /ugyanolyan elsőbbséget. De mivel ezeknek az operátoroknak az asszociativitása balról jobbra van , a * belőször kiértékelik, majd elvégzik a felosztást. Ennek a kifejezésnek a végeredménye az lesz 10.

Ebben a konkrét példában az asszociativitás nem igazán számít. Mert ha az osztást a szorzás előtt hajtják végre, az eredmény nem lesz hatással.

Nézzünk meg egy másik példát.

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

Az =operátor asszociativitása jobbról balra . Tehát c (ie 3) értéke hozzárendelődik b-hez, majd b értéke hozzá van rendelve a-hoz. Tehát ennek az utasításnak a végrehajtása után az a, b és c értékei meg fognak jelenni 3.

Az alábbi táblázat a C # operátorok asszociativitását mutatja:

C # Operátorok asszociativitása
Kategória Operátorok Asszociativitás
Postfix növekmény és csökkentés ++, - Balról jobbra
Prefix Increment, Decrement és Unary ++, -, +, -,!, ~ Jobbról balra
Szorzó *, /,% Balról jobbra
Adalékanyag +, - Balról jobbra
Váltás <> Balról jobbra
Relációs <,,> = Balról jobbra
Egyenlőség ==,! = Balról jobbra
Bitenkénti ÉS & Balról jobbra
Bitenként XOR ^ Balról jobbra
Bitenként VAGY | Balról jobbra
Logikai ÉS && Balról jobbra
Logikai VAGY || Balról jobbra
Hármas ? : Jobbról balra
Feladat =, + =, - =, * =, / =,% =, & =, | =, =, <> = Jobbról balra

Szinte az összes operátornak asszociativitása van balról jobbra. Jobbról balra asszociatív operátorok:

  • Unary operátorok
  • Prefix növekmény és csökkentés operátorok
  • Ternary Operator
  • Feladatkezelők

2. példa: Operátorok asszociativitása

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

A program futtatásakor a kimenet a következő lesz:

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

érdekes cikkek...