Ц # Предност и асоцијативност оператора: дефиниција и примери

У овом упутству ћемо научити о првенству оператора и асоцијативности у Ц #. Ово ће нам дати идеју о томе како компајлер Ц # процењује израз.

Предност оператора Ц #

Приоритет оператора је скуп правила који дефинише како се израз процењује. У Ц #, сваки Ц # оператор има додељени приоритет и на основу тих приоритета, израз се процењује.

На пример , приоритет (*)оператора множења већи је од приоритета (+)оператора сабирања . Стога се операција која укључује множење изводи пре сабирања.

Погледајте изјаву у наставку.

 инт к = 4 + 3 * 5;

Колика ће бити вредност к након извршавања ове изјаве?

Операнд 3је повезан са +и *. Као што је раније речено, множење има већи приоритет од сабирања. Дакле, операција 3 * 5се изводи уместо 4 + 3. Вредност променљиве к биће 19.

Ако би сабирање имало већи приоритет, 4 + 3прво би се процењивало, а вредност к би била 35.

Табела приоритета оператора

Што је већи приоритет оператора, то се већи појављује у табели

Предност оператора Ц #
Категорија Оператори
Постфик повећање и смањење ++, -
Префикс Инкремент, Декремент и Унари ++, -, +, -,!, ~
Мултипликативни *, /,%
Адитив +, -
Смена <>
Релацијски <,,> =
Једнакост ==,! =
У битовима И. &
Битно КСОР ^
У битовима ИЛИ |. |
Логично И &&
Логично ИЛИ ||
Тернари ? :
Задатак =, + =, - =, * =, / =,% =, & =, | =, =, <> =

Оператори доделе имају најмањи приоритет, док оператори повећања и смањења постфикса имају највећи приоритет.

Пример 1: Предност оператора

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

Када покренемо програм, излаз ће бити:

 19 Нетачно

Хајде да разумемо како се израз оцењује у програму.

Приоритет --и ++је већи од *, а приоритет од *је већи од -. Отуда изјава,

 резултат1 = --а * б - ++ ц;

је еквивалентно са

 резултат1 = ((--а) * б) - (++ ц);

Израз унутар заграда увек се прво процењује без обзира на приоритет оператора изван њега.

  • У почетку се (--а) вреднује као резултат у 4.
  • Тада се (++ ц) процењује резултујући у 5.
  • Сада се (а * б) процењује резултирајући у 24.
  • На крају, врши се одузимање резултујући у 19.
  • Отуда ће бити коначна вредност резултата1 19.

У следећем изразу приоритет +је већи од >=. Дакле, прво се додају ц и а и збир се упоређује са б да би се добило false.

Асоцијативност оператора у Ц #

У претходном одељку смо разговарали о предности оператора. Ако се користе два оператора са различитим приоритетом, прво се процењује оператор са већим приоритетом.

Али шта ако оба оператора имају исти приоритет?

У том случају, израз се процењује на основу асоцијативности оператора (слева надесно или здесна налево).

На пример:

инт а = 5, б = 6, ц = 3; инт резултат = а * б / ц;

Овде, како *и /имају исти приоритет. Али пошто је асоцијативност ових оператора слева надесно , a * bпрво се процењује, а затим се врши подела. Коначни резултат овог израза биће 10.

У овом конкретном примеру, асоцијативност заправо није битна. Јер чак и кад би се дељење вршило пре множења, то не би утицало на резултат.

Погледајмо још један пример.

инт а = 5, б = 6, ц = 3; а = б = ц;

Асоцијативност =оператора је здесна налево . Дакле, вредност ц (тј. 3) Је додељена б, а затим је вредност б додељена а. Дакле, након извршавања ове изјаве, вредности а, б и ц ће бити 3.

Табела испод приказује асоцијативност Ц # оператора:

Ц # Асоцијативност оператора
Категорија Оператори Асоцијативност
Постфик повећање и смањење ++, - С лева надесно
Префикс Инкремент, Декремент и Унари ++, -, +, -,!, ~ Десна на лево
Мултипликативни *, /,% С лева надесно
Адитив +, - С лева надесно
Смена <> С лева надесно
Релацијски <,,> = С лева надесно
Једнакост ==,! = С лева надесно
У битовима И. & С лева надесно
Битно КСОР ^ С лева надесно
У битовима ИЛИ |. | С лева надесно
Логично И && С лева надесно
Логично ИЛИ || С лева надесно
Тернари ? : Десна на лево
Задатак =, + =, - =, * =, / =,% =, & =, | =, =, <> = Десна на лево

Готово сви оператери имају асоцијативност с лева на десно. Оператори који имају асоцијативност здесна налево су:

  • Унарни оператори
  • Оператори повећања и смањења префикса
  • Тернарни оператер
  • Оператори доделе

Пример 2: Асоцијативност оператора

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

Када покренемо програм, излаз ће бити:

 10 а = 3, б = 3, ц = 3

Занимљиви Чланци...