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 3
er assosiert med +
og *
. Som nevnt tidligere har multiplikasjon høyere forrang enn tillegg. Så operasjonen 3 * 5
utføres i stedet for 4 + 3
. Verdien av variabelen x vil være 19
.
Hvis tillegg vil ha høyere prioritet, 4 + 3
vil 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 prioritetKategori | 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 * b
blir 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ørerKategori | 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