C # forrang og tilknytning til operatører: definition og eksempler

I denne vejledning lærer vi om operatørprioritet og associativitet i C #. Dette giver os en idé om, hvordan et udtryk evalueres af C # compileren.

C # Operatørpræference

Operatørprioritet er et sæt regler, der definerer, hvordan et udtryk vurderes. I C # har hver C # -operatør en tildelt prioritet, og baseret på disse prioriteter evalueres udtrykket.

For eksempel er multiplikationsoperatorens forrang (*)højere end prioritet for additionsoperator (+). Derfor udføres operation, der involverer multiplikation, før tilsætning.

Se på udsagnet nedenfor.

 int x = 4 + 3 * 5;

Hvad vil være værdien af ​​x efter udførelse af denne erklæring?

Operanden 3er forbundet med +og *. Som nævnt tidligere har multiplikation en højere prioritet end tilføjelse. Så operationen 3 * 5udføres i stedet for 4 + 3. Værdien af ​​variablen x er 19.

Hvis tilføjelse ville have en højere prioritet, 4 + 3ville den først blive evalueret, og værdien af ​​x ville være 35.

Operatørens prioritetstabel

Jo højere operatøren har forrang, jo højere vises den i tabellen

C # Operatørpræference
Kategori Operatører
Postfix forøgelse og nedgang ++, -
Præfiks forøgelse, nedgang og unary ++, -, +, -,!, ~
Multiplikativ *, /,%
Tilsætningsstof +, -
Flytte <>
Relationel <,,> =
Lighed ==,! =
Bitvis OG &
Bitvis XOR ^
Bitvis ELLER |
Logisk OG &&
Logisk ELLER ||
Ternær ? :
Opgave =, + =, - =, * =, / =,% =, & =, | =, =, <> =

Tildelingsoperatørerne har den laveste prioritet, mens postfix-tilvækst- og dekrementeringsoperatørerne har den højeste prioritet.

Eksempel 1: Operatørpræference

 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 kører programmet, vil output være:

 19 Falsk

Lad os forstå, hvordan udtrykket evalueres i programmet.

Forrang for --og ++er højere end *, og forrang for *er højere end -. Derfor erklæringen,

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

svarer til

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

Udtrykket inden for parenteser evalueres altid først, uanset hvilken prioritet operatører uden for det har.

  • Først evalueres (--a), hvilket resulterer i 4.
  • Derefter (++ c) evalueres resulterende i 5.
  • Nu, (a * b) evalueres resulterende i 24.
  • Endelig udføres subtraktionen, hvilket resulterer i 19.
  • Derfor bliver den endelige værdi af resultat1 19.

I det næste udtryk er forrang af +højere end >=. Så c og a tilføjes først, og summen sammenlignes med b for at producere false.

Associativitet af operatører i C #

I det forrige afsnit diskuterede vi førernes forrang. Hvis der anvendes to operatorer med forskellig prioritet, vurderes operatøren med højere prioritet først.

Men hvad hvis begge operatører har samme forrang?

I et sådant tilfælde evalueres udtrykket ud fra operatorens associativitet (venstre mod højre eller højre mod venstre).

For eksempel:

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

Her både *og /har samme præcedens. Men da associeringsevnen af ​​disse operatører er fra venstre mod højre , a * bevalueres først, og derefter udføres deling. Det endelige resultat af dette udtryk bliver 10.

I dette særlige eksempel betyder associativitet ikke rigtig noget. For selv hvis opdeling blev udført før multiplikation, ville resultatet ikke blive påvirket.

Lad os se på et andet eksempel.

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

=Operatørens associativitet er fra højre mod venstre . Så værdien af ​​c (dvs. 3) tildeles b, og derefter tildeles værdien af ​​b til a. Så efter udførelsen af ​​denne erklæring vil værdierne for a, b og c være 3.

Tabellen nedenfor viser associeringsevnen for C # -operatører:

C # Operatørers tilknytning
Kategori Operatører Associativitet
Postfix forøgelse og nedgang ++, - Venstre til højre
Præfiks forøgelse, nedgang og unary ++, -, +, -,!, ~ Højre til venstre
Multiplikativ *, /,% Venstre til højre
Tilsætningsstof +, - Venstre til højre
Flytte <> Venstre til højre
Relationel <,,> = Venstre til højre
Lighed ==,! = Venstre til højre
Bitvis OG & Venstre til højre
Bitvis XOR ^ Venstre til højre
Bitvis ELLER | Venstre til højre
Logisk OG && Venstre til højre
Logisk ELLER || Venstre til højre
Ternær ? : Højre til venstre
Opgave =, + =, - =, * =, / =,% =, & =, | =, =, <> = Højre til venstre

Næsten alle operatører har associativitet fra venstre mod højre. Operatørerne, der har associativitet fra højre til venstre, er:

  • Unary operatører
  • Præfiks forøgelses- og formindskelsesoperatører
  • Ternær operatør
  • Opgaveoperatører

Eksempel 2: Operatørers tilknytning

 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 kører programmet, vil output være:

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

Interessante artikler...