C # Operaattoreiden etusija ja assosiatiivisuus: Määritelmä ja esimerkkejä

Tässä opetusohjelmassa opit operaattorin etusijasta ja assosiatiivisuudesta C #: ssa. Tämä antaa meille käsityksen siitä, miten C #-kääntäjä arvioi lausekkeen.

C # Operaattorin etusija

Operaattorin etusija on joukko sääntöjä, jotka määrittelevät lausekkeen arvioinnin. Kohdassa C # jokaisella C # -operaattorilla on määritetty prioriteetti ja näiden prioriteettien perusteella lauseke arvioidaan.

Esimerkiksi kertolaskuoperaattorin etusija (*)on suurempi kuin lisäysoperaattorin etusija (+). Siksi kertolaskuoperaatio suoritetaan ennen lisäämistä.

Katso alla oleva lausunto.

 int x = 4 + 3 * 5;

Mikä on x: n arvo tämän käskyn suorittamisen jälkeen?

Operandi 3liittyy +ja *. Kuten aiemmin todettiin, kertolasku on etusijalla kuin summaus. Joten, operaatio 3 * 5suoritetaan sijasta 4 + 3. Muuttujan x arvo on 19.

Jos lisäyksellä olisi korkeampi etusija, 4 + 3se arvioidaan ensin ja x: n arvo olisi 35.

Operaattorin prioriteettitaulukko

Mitä suurempi operaattorin etusija on, sitä korkeampi se näkyy taulukossa

C # Operaattorin etusija
Kategoria Operaattorit
Postfixin lisäys ja vähennys ++, -
Etuliitteen lisäys, vähennys ja unary ++, -, +, -,!, ~
Kerroin *, /,%
Lisäaine +, -
Siirtää <>
Suhteellinen <,,> =
Tasa-arvo ==,! =
Bittikohtaisesti JA &
Bitteittäin XOR ^
Bittiä TAI |
Looginen JA &&
Looginen TAI ||
Ternary ? :
Tehtävä =, + =, - =, * =, / =,% =, & =, | =, =, <> =

Määritysoperaattoreilla on pienin etusija, kun taas jälkikorjauksen lisäys- ja vähennysoperaattoreilla on korkein prioriteetti.

Esimerkki 1: Operaattorin etusija

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

Kun suoritamme ohjelmaa, tulos on:

 19 Väärä

Ymmärretään miten lauseketta arvioidaan ohjelmassa.

Edeltävyys --ja ++on suurempi kuin *, ja etusija *on suurempi kuin -. Siksi lausunto,

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

vastaa

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

Suluissa oleva ilmaisu arvioidaan aina ensin riippumatta siitä, mikä on operaattoreiden etusija sen ulkopuolella.

  • Aluksi (--a) arvioidaan tulokseksi 4.
  • Sitten (++ c) arvioidaan tulokseksi 5.
  • Nyt (a * b) arvioidaan tulokseksi 24.
  • Lopuksi vähennys suoritetaan tuloksena 19.
  • Näin ollen tuloksen1 lopullinen arvo on 19.

Seuraavassa lausekkeessa etusija +on suurempi kuin >=. Joten c ja a lisätään ensin ja summaa verrataan b: hen tuottamiseksi false.

Operaattoreiden assosiatiivisuus C #

Edellisessä osassa keskustelimme operaattorin etusijasta. Jos käytetään kahta eri etusijalla olevaa operaattoria, ensin arvioidaan korkeamman prioriteetin operaattori.

Mutta entä jos molemmilla operaattoreilla on sama etusija?

Tällöin lauseke arvioidaan operaattorin assosiatiivisuuden perusteella (vasemmalta oikealle tai oikealta vasemmalle).

Esimerkiksi:

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

Nyt molemmat *ja /on sama etusija. Mutta koska näiden operaattorien assosiatiivisuus on vasemmalta oikealle , a * bse arvioidaan ensin ja sitten jako suoritetaan. Tämän lausekkeen lopputulos on 10.

Tässä nimenomaisessa esimerkissä assosiatiivisuudella ei ole väliä. Koska vaikka jakaminen suoritettaisiin ennen kertomista, tulos ei vaikuttaisi.

Katsotaanpa toinen esimerkki.

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

=Operaattorin assosiatiivisuus on oikealta vasemmalle . Joten c: n (ts. 3) Arvo osoitetaan b: lle ja sitten b: n arvo a: lle. Joten tämän lauseen suorittamisen jälkeen a: n, b: n ja c: n arvot ovat 3.

Seuraava taulukko osoittaa C # -operaattorien assosiatiivisuuden:

C # Operaattoreiden assosiatiivisuus
Kategoria Operaattorit Assosiatiivisuus
Postfixin lisäys ja vähennys ++, - Vasemmalta oikealle
Etuliitteen lisäys, vähennys ja unary ++, -, +, -,!, ~ Oikealta vasemmalle
Kerroin *, /,% Vasemmalta oikealle
Lisäaine +, - Vasemmalta oikealle
Siirtää <> Vasemmalta oikealle
Suhteellinen <,,> = Vasemmalta oikealle
Tasa-arvo ==,! = Vasemmalta oikealle
Bittikohtaisesti JA & Vasemmalta oikealle
Bitteittäin XOR ^ Vasemmalta oikealle
Bittiä TAI | Vasemmalta oikealle
Looginen JA && Vasemmalta oikealle
Looginen TAI || Vasemmalta oikealle
Ternary ? : Oikealta vasemmalle
Tehtävä =, + =, - =, * =, / =,% =, & =, | =, =, <> = Oikealta vasemmalle

Lähes kaikilla operaattoreilla on assosiatiivisuutta vasemmalta oikealle. Operaattorit, joilla on assosiatiivisuutta oikealta vasemmalle, ovat:

  • Unary-operaattorit
  • Etuliitteen lisäys- ja vähennysoperaattorit
  • Ternary Operaattori
  • Tehtäväoperaattorit

Esimerkki 2: Operaattoreiden assosiatiivisuus

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

Kun suoritamme ohjelmaa, tulos on:

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

Mielenkiintoisia artikkeleita...