У овом упутству ћемо научити о првенству оператора и асоцијативности у Ц #. Ово ће нам дати идеју о томе како компајлер Ц # процењује израз.
Предност оператора Ц #
Приоритет оператора је скуп правила који дефинише како се израз процењује. У Ц #, сваки Ц # оператор има додељени приоритет и на основу тих приоритета, израз се процењује.
На пример , приоритет (*)оператора множења већи је од приоритета (+)оператора сабирања . Стога се операција која укључује множење изводи пре сабирања.
Погледајте изјаву у наставку.
инт к = 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








