I denna handledning lär vi dig om operatörens företräde och associativitet i C #. Detta ger oss en uppfattning om hur ett uttryck utvärderas av C # kompilatorn.
C # Operatörens företräde
Operatörens företräde är en uppsättning regler som definierar hur ett uttryck utvärderas. I C # har varje C # -operatör en tilldelad prioritet och baserat på dessa prioriteringar utvärderas uttrycket.
Exempelvis är multiplikationsoperatörens företräde (*)högre än prioriteten för additionsoperatör (+). Därför utförs operation som involverar multiplikation före tillsats.
Ta en titt på uttalandet nedan.
int x = 4 + 3 * 5;
Vad blir värdet av x efter att detta uttalande har utförts?
Operand 3är associerad med +och *. Som tidigare nämnts har multiplikation högre företräde än addition. Så operationen 3 * 5utförs istället för 4 + 3. Värdet på variabeln x kommer att vara 19.
Om tillägg skulle ha högre prioritet, 4 + 3skulle det först utvärderas och värdet på x skulle vara 35.
Operatörens prioritetstabell
Ju högre prioritet operatören har, desto högre visas den i tabellen
C # Operatörens företräde| Kategori | Operatörer |
|---|---|
| Postfix-ökning och minskning | ++, - |
| Prefix Increment, Decrement och Unary | ++, -, +, -,!, ~ |
| Multiplikativ | *, /,% |
| Tillsats | +, - |
| Flytta | <> |
| Relationellt | <,,> = |
| Jämlikhet | ==,! = |
| Bitvis OCH | & |
| Bitvis XOR | ^ |
| Bitvis ELLER | | |
| Logisk OCH | && |
| Logiskt ELLER | || |
| Ternära | ? : |
| Uppdrag | =, + =, - =, * =, / =,% =, & =, | =, =, <> = |
Tilldelningsoperatörerna har lägst företräde medan postfix-inkrement- och minskningsoperatörerna har högst företräde.
Exempel 1: Operatörens företräde
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ör programmet blir resultatet:
19 Falskt
Låt oss förstå hur uttrycket utvärderas i programmet.
Prioriteten för --och ++är högre än *, och företräde *är högre än -. Därav uttalandet,
resultat1 = --a * b - ++ c;
är ekvivalent med
resultat1 = ((--a) * b) - (++ c);
Uttrycket inom parentes utvärderas alltid först oavsett vilken prioritet operatörer utanför det har.
- Först utvärderas (--a) till och med
4.
- Sedan utvärderas (++ c) till och med
5.
- Nu utvärderas (a * b) till och med
24.
- Slutligen utförs subtraktionen och resulterar i
19.
- Därför blir slutvärdet för resultat1
19.
I nästa uttryck är företräde +högre än >=. Så, c och a läggs till först och summan jämförs med b för att producera false.
Associativitet för operatörer i C #
I föregående avsnitt diskuterade vi om operatörens företräde. Om två operatörer med olika prioritet används utvärderas operatören med högre prioritet först.
Men tänk om båda operatörerna har samma företräde?
I sådana fall utvärderas uttrycket baserat på operatörens associativitet (vänster till höger eller höger till vänster).
Till exempel:
int a = 5, b = 6, c = 3; int-resultat = a * b / c;
Här både *och /har samma prioritet. Men eftersom associativitet av dessa operatörer är från vänster till höger , a * butvärderas först och sedan division utförs. Det slutliga resultatet av detta uttryck blir 10.
I detta speciella exempel spelar inte associeringsförmågan någon roll. För även om delning genomfördes före multiplikation skulle resultatet inte påverkas.
Låt oss ta en titt på ett annat exempel.
int a = 5, b = 6, c = 3; a = b = c;
=Operatörens associativitet är från höger till vänster . Så värdet på c (dvs. 3) tilldelas b, och sedan tilldelas värdet b till a. Så efter att detta uttalande har utförts kommer värdena a, b och c att vara 3.
Tabellen nedan visar associativiteten för C # -operatörer:
C # Föreningarnas associativitet| Kategori | Operatörer | Associativitet |
|---|---|---|
| Postfix-ökning och minskning | ++, - | Vänster till höger |
| Prefix Increment, Decrement och Unary | ++, -, +, -,!, ~ | Höger till vänster |
| Multiplikativ | *, /,% | Vänster till höger |
| Tillsats | +, - | Vänster till höger |
| Flytta | <> | Vänster till höger |
| Relationellt | <,,> = | Vänster till höger |
| Jämlikhet | ==,! = | Vänster till höger |
| Bitvis OCH | & | Vänster till höger |
| Bitvis XOR | ^ | Vänster till höger |
| Bitvis ELLER | | | Vänster till höger |
| Logisk OCH | && | Vänster till höger |
| Logiskt ELLER | || | Vänster till höger |
| Ternära | ? : | Höger till vänster |
| Uppdrag | =, + =, - =, * =, / =,% =, & =, | =, =, <> = | Höger till vänster |
Nästan alla operatörer har associativitet från vänster till höger. De operatörer som har associativitet från höger till vänster är:
- Unary operatörer
- Prefix Increment and Decrement Operators
- Ternär operatör
- Uppdragsoperatörer
Exempel 2: Operatörers associativitet
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ör programmet blir resultatet:
10 a = 3, b = 3, c = 3








