Operatorių C # prioritetas ir asociatyvumas: apibrėžimas ir pavyzdžiai

Šioje pamokoje sužinosite apie operatoriaus pirmenybę ir asociatyvumą C #. Tai leis mums suprasti, kaip išraišką vertina C # kompiliatorius.

C # Operatoriaus pirmenybė

Operatoriaus pirmenybė yra taisyklių rinkinys, apibrėžiantis, kaip vertinama išraiška. C # kiekvienam C # operatoriui yra priskirtas prioritetas ir, remiantis šiais prioritetais, išraiška yra vertinama.

Pavyzdžiui , daugybos (*)operatoriaus pirmenybė yra didesnė už pridėjimo (+)operatoriaus pirmenybę . Todėl prieš pridedant atliekama daugyba.

Pažvelkite į žemiau pateiktą teiginį.

 int x = 4 + 3 * 5;

Kokia bus x reikšmė įvykdžius šį teiginį?

Operandas 3siejamas su +ir *. Kaip minėta anksčiau, daugyba turi didesnę pirmenybę nei pridėjimas. Taigi, operacija 3 * 5atliekama vietoj 4 + 3. Kintamojo x reikšmė bus 19.

Jei pridėjimas turėtų didesnę pirmenybę, 4 + 3jis būtų įvertintas pirmiausia ir x reikšmė būtų 35.

Operatoriaus pirmenybės lentelė

Kuo didesnis operatoriaus prioritetas, tuo didesnis jis rodomas lentelėje

C # Operatoriaus pirmenybė
Kategorija Operatoriai
„Postfix“ prieaugis ir sumažėjimas ++, -
Priešdėlio prieaugis, mažinimas ir vienetinis ++, -, +, -,!, ~
Dauginantis *, /,%
Priedas +, -
„Shift“ <>
Santykinis <,,> =
Lygybė ==,! =
Bitais IR &
Bitais XOR ^
ARBA bitais |
Loginis IR &&
Logiška ARBA ||
Ternaras ? :
Užduotis =, + =, - =, * =, / =,% =, & =, | =, =, <> =

Priskyrimo operatoriai turi mažiausią pirmenybę, o „postfix“ prieaugio ir mažinimo operatoriai.

1 pavyzdys: Operatoriaus pirmenybė

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

Kai vykdysime programą, išvestis bus:

 19 Klaidinga

Supraskime, kaip išraiška vertinama programoje.

Pirmenybė --ir ++yra didesnė už *, o pirmenybė *yra didesnė nei -. Taigi teiginys,

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

yra lygiavertis

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

Išraiška skliaustuose visada vertinama pirmiausia, nesvarbu, kokia yra už jos ribų esančių operatorių pirmenybė.

  • Iš pradžių įvertinamas (--a) į 4.
  • Tada (++ c) įvertinama, gaunant į 5.
  • Dabar įvertinama (a * b), gaunama į 24.
  • Galiausiai atliekamas atimimas, kurio rezultatas yra 19.
  • Taigi galutinė rezultato1 vertė bus 19.

Kitoje išraiškoje pirmenybė +yra didesnė nei >=. Taigi, pirmiausia pridedama c ir a, o suma gaunama lyginant su b false.

Operatorių asociacija C #

Ankstesniame skyriuje aptarėme operatoriaus pirmenybę. Jei naudojami du skirtingo prioriteto operatoriai, pirmiausia įvertinamas aukštesnio prioriteto operatorius.

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;

=Operatoriaus asociatyvumas yra iš dešinės į kairę . Taigi c (ty 3) reikšmė priskiriama b, o tada b reikšmė priskiriama a. Taigi, įvykdžius šį teiginį, a, b ir c reikšmės bus 3.

Žemiau esančioje lentelėje parodytas C # operatorių asociatyvumas:

C # Operatorių asociatyvumas
Kategorija Operatoriai Asociatyvumas
„Postfix“ prieaugis ir sumažėjimas ++, - Iš kairės į dešinę
Priešdėlio prieaugis, mažinimas ir vienetinis ++, -, +, -,!, ~ Iš dešinės į kairę
Dauginantis *, /,% Iš kairės į dešinę
Priedas +, - Iš kairės į dešinę
„Shift“ <> Iš kairės į dešinę
Santykinis <,,> = Iš kairės į dešinę
Lygybė ==,! = Iš kairės į dešinę
Bitais IR & Iš kairės į dešinę
Bitais XOR ^ Iš kairės į dešinę
ARBA bitais | Iš kairės į dešinę
Loginis IR && Iš kairės į dešinę
Logiška ARBA || Iš kairės į dešinę
Ternaras ? : Iš dešinės į kairę
Užduotis =, + =, - =, * =, / =,% =, & =, | =, =, <> = Iš dešinės į kairę

Beveik visi operatoriai turi asociaciją iš kairės į dešinę. Operatoriai, turintys asociaciją iš dešinės į kairę, yra:

  • Unariniai operatoriai
  • Prefiksų prieaugio ir mažinimo operatoriai
  • Ternarinis operatorius
  • Užduočių operatoriai

2 pavyzdys: Operatorių asociatyvumas

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

Kai vykdysime programą, išvestis bus:

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

Įdomios straipsniai...