Operaatorite C # ülimuslikkus ja assotsiatiivsus: määratlus ja näited

Selles õpetuses saate teada operaatori prioriteedist ja assotsiatiivsusest C # -s. See annab meile aimu, kuidas avaldist C # kompilaator hindab.

C # Operaatori ülimuslikkus

Operaatori tähtsus on reeglite kogum, mis määratleb avaldise hindamise viisi. C # puhul on igal C # operaatoril määratud prioriteet ja nende prioriteetide põhjal hinnatakse avaldist.

Näiteks korrutamisoperaatori ülimuslikkus (*)on suurem kui liitmisoperaatori ülimuslikkus (+). Seetõttu viiakse enne liitmist läbi korrutamine.

Heitke pilk allpool olevale avaldusele.

 int x = 4 + 3 * 5;

Milline on x väärtus pärast selle lause täitmist?

Operand 3on seotud +ja *. Nagu varem öeldud, on korrutamisel suurem eelistus kui liitmisel. Niisiis, operatsioon 3 * 5viiakse läbi asemel 4 + 3. Muutuja x väärtus on 19.

Kui liitmisel oleks kõrgem tähtsus, 4 + 3hinnatakse seda kõigepealt ja x väärtus oleks 35.

Operaatori tähtsuse tabel

Mida suurem on operaatori paremus, seda suurem on see tabelis

C # Operaatori ülimuslikkus
Kategooria Operaatorid
Postfixi kasv ja kahanemine ++, -
Prefiksi juurdekasv, kahanev ja unaarne ++, -, +, -,!, ~
Mitmekordne *, /,%
Söödalisand +, -
Shift <>
Suhteline <,,> =
Võrdsus ==,! =
Pikkade kaupa JA &
Piki XOR ^
Piki VÕI |
Loogiline JA &&
Loogiline VÕI ||
Kolmepoolne ? :
Ülesanne =, + =, - =, * =, / =,% =, & =, | =, =, <> =

Omistamise operaatoritel on kõige madalam prioriteet, samas kui postfixi juurdekasvu ja vähendamise operaatoritel on kõige suurem tähtsus.

Näide 1: Operaatori ülimuslikkus

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

Programmi käivitamisel on väljund:

 19 Vale

Saame aru, kuidas väljendit programmis hinnatakse.

Eelisjärjestus --ja ++on suurem kui *, ja ülimuslikkus *on suurem kui -. Siit ka väide,

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

on samaväärne

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

Sulgudes sisalduvat väljendit hinnatakse alati kõigepealt, hoolimata sellest, milline on väljaspool seda asuvate operaatorite tähtsus.

  • Alguses hinnatakse (--a), mille tulemuseks on 4.
  • Seejärel hinnatakse (++ c) tulemuseks 5.
  • Nüüd hinnatakse (a * b) tulemuseks 24.
  • Lõpuks tehakse lahutamine, mille tulemuseks on 19.
  • Seega on tulemuse1 lõplik väärtus 19.

Järgmises avaldises on ülimuslikkus +suurem kui >=. Niisiis lisatakse kõigepealt c ja a ning saadava summa saamiseks võrreldakse b-d false.

C # operaatorite assotsiatiivsus

Eelmises osas käsitlesime operaatori eelistamist. Kui kasutatakse kahte erineva tähtsusega operaatorit, hinnatakse kõigepealt kõrgema tähtsusega operaatorit.

Aga mis siis, kui mõlemal operaatoril on sama ülimuslikkus?

Sellisel juhul hinnatakse väljendit operaatori assotsiatiivsuse põhjal (vasakult paremale või paremalt vasakule).

Näiteks:

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

Siin on mõlemal *ja /sama ülimuslikkus. Kuid kuna nende operaatorite assotsiatiivsus on vasakult paremale , a * bhinnatakse kõigepealt ja seejärel viiakse läbi jagamine. Selle väljendi lõpptulemus on 10.

Selles konkreetses näites pole assotsiatiivsus tegelikult oluline. Sest isegi kui jagamine viiakse läbi enne korrutamist, ei mõjutaks see tulemust.

Vaatame veel ühte näidet.

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

=Operaatori assotsiatiivsus on paremalt vasakule . Niisiis määratakse väärtus 3b (st ) b-le ja seejärel b väärtus a-le. Nii et pärast selle lause täitmist on a, b ja c väärtused 3.

Allpool olev tabel näitab C # operaatorite assotsiatiivsust:

C # Operaatorite assotsiatiivsus
Kategooria Operaatorid Assotsiatiivsus
Postfixi kasv ja kahanemine ++, - Vasakult paremale
Prefiksi juurdekasv, kahanev ja unaarne ++, -, +, -,!, ~ Paremalt vasakule
Mitmekordne *, /,% Vasakult paremale
Söödalisand +, - Vasakult paremale
Shift <> Vasakult paremale
Suhteline <,,> = Vasakult paremale
Võrdsus ==,! = Vasakult paremale
Pikkade kaupa JA & Vasakult paremale
Piki XOR ^ Vasakult paremale
Piki VÕI | Vasakult paremale
Loogiline JA && Vasakult paremale
Loogiline VÕI || Vasakult paremale
Kolmepoolne ? : Paremalt vasakule
Ülesanne =, + =, - =, * =, / =,% =, & =, | =, =, <> = Paremalt vasakule

Peaaegu kõigil operaatoritel on assotsiatiivsus vasakult paremale. Operaatorid, kellel on assotsiatiivsus paremalt vasakule, on:

  • Unary operaatorid
  • Prefiksi kasvu- ja kahanemisoperaatorid
  • Kolmepoolne operaator
  • Ülesandeoperaatorid

Näide 2: Operaatorite assotsiatiivsus

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

Programmi käivitamisel on väljund:

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

Huvitavad Artiklid...