C # Prioritet og tilknytning til operatører: definisjon og eksempler

I denne veiledningen vil du lære om operatørprioritet og assosiativitet i C #. Dette vil gi oss en ide om hvordan et uttrykk blir evaluert av C # kompilatoren.

C # Operatørens prioritet

Operatørprioritet er et sett med regler som definerer hvordan et uttrykk vurderes. I C # har hver C # -operatør en tildelt prioritet, og basert på disse prioriteringene blir uttrykket evaluert.

For eksempel er forrang for multiplikasjonsoperatør (*)høyere enn forrang for tilleggsoperator (+). Derfor utføres operasjon som involverer multiplikasjon før tilsetning.

Ta en titt på uttalelsen nedenfor.

 int x = 4 + 3 * 5;

Hva vil være verdien av x etter at denne uttalelsen er utført?

Operanden 3er assosiert med +og *. Som nevnt tidligere har multiplikasjon høyere forrang enn tillegg. Så operasjonen 3 * 5utføres i stedet for 4 + 3. Verdien av variabelen x vil være 19.

Hvis tillegg vil ha høyere prioritet, 4 + 3vil det bli evaluert først og verdien av x ville være 35.

Operatørens prioritetstabell

Jo høyere prioritet operatøren har, jo høyere vises den i tabellen

C # Operatørens prioritet
Kategori Operatører
Postfix-økning og -reduksjon ++, -
Prefiksinkrement, dekrementering og unary ++, -, +, -,!, ~
Multiplikativ *, /,%
Tilsetningsstoff +, -
Skifte <>
Relasjonelt <,,> =
Likestilling ==,! =
Bitvis OG &
Bitvis XOR ^
Bitvis ELLER |
Logisk OG &&
Logisk ELLER ||
Ternær ? :
Oppdrag =, + =, - =, * =, / =,% =, & =, | =, =, <> =

Oppdragsoperatørene har lavest prioritet mens postfix-økning og dekrementoperatører har høyest prioritet.

Eksempel 1: Operatørprioritet

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

Når vi kjører programmet, vil utdataene være:

 19 Falske

La oss forstå hvordan uttrykket blir evaluert i programmet.

Forrang for --og ++er høyere enn *, og forrang for *er høyere enn -. Derfor uttalelsen,

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

tilsvarer

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

Uttrykket i parentes evalueres alltid først, uansett hvilken prioritet operatører utenfor det har.

  • Først blir (--a) evaluert og resultert i 4.
  • Deretter (++ c) blir evaluert og resultert i 5.
  • Nå blir (a * b) evaluert og resultert i 24.
  • Til slutt utføres subtraksjonen og resulterer i 19.
  • Derfor blir den endelige verdien av resultat1 19.

I det neste uttrykket er forrang av +høyere enn >=. Så, c og a legges først til og summen sammenlignes med b for å produsere false.

Assosiativitet av operatører i C #

I forrige avsnitt diskuterte vi operatørens forrang. Hvis to operatører med forskjellig forrang brukes, blir operatøren med høyere prioritet evaluert først.

Men hva om begge operatørene har samme forrang?

I slike tilfeller blir uttrykket evaluert basert på assosiativiteten til operatøren (fra venstre til høyre eller fra høyre til venstre).

For eksempel:

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

Her, både *og /har samme prioritet. Men siden assosiativiteten til disse operatørene er fra venstre til høyre , a * bblir den først evaluert og deretter blir divisjonen utført. Det endelige resultatet av dette uttrykket blir 10.

I dette spesifikke eksemplet spiller ikke assosiativiteten noen rolle. For selv om deling ble utført før multiplikasjon, ville resultatet ikke bli påvirket.

La oss ta en titt på et annet eksempel.

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

Assosiativiteten til =operatøren er fra høyre til venstre . Så verdien av c (dvs. 3) tildeles b, og deretter tildeles verdien av b til a. Så etter å ha utført denne uttalelsen, vil verdiene til a, b og c være 3.

Tabellen nedenfor viser assosiativiteten til C # -operatører:

C # Assosiativitet av operatører
Kategori Operatører Assosiativitet
Postfix-økning og -reduksjon ++, - Venstre til høyre
Prefiksinkrement, dekrementering og unary ++, -, +, -,!, ~ Høyre til venstre
Multiplikativ *, /,% Venstre til høyre
Tilsetningsstoff +, - Venstre til høyre
Skifte <> Venstre til høyre
Relasjonelt <,,> = Venstre til høyre
Likestilling ==,! = Venstre til høyre
Bitvis OG & Venstre til høyre
Bitvis XOR ^ Venstre til høyre
Bitvis ELLER | Venstre til høyre
Logisk OG && Venstre til høyre
Logisk ELLER || Venstre til høyre
Ternær ? : Høyre til venstre
Oppdrag =, + =, - =, * =, / =,% =, & =, | =, =, <> = Høyre til venstre

Nesten alle operatørene har assosiativitet fra venstre til høyre. Operatørene som har assosiativitet fra høyre til venstre er:

  • Uary operatører
  • Prefiks øknings- og reduksjonsoperatører
  • Ternær operatør
  • Oppdragsoperatører

Eksempel 2: Assosiativitet til operatører

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

Når vi kjører programmet, vil utdataene være:

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

Interessante artikler...