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 * 5
utfö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 + 3
skulle 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ädeKategori | 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 * b
utvä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 associativitetKategori | 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