Шта је приоритет и асоцијативност Ц оператора

Sta Je Prioritet I Asocijativnost C Operatora



Оператори се обично користе за извођење различитих аритметичких и логичких операција у Ц. Програмски језик Ц прати одређени редослед познат као приоритет оператора и асоцијативност да се одреди редослед операција у току извођења. Правила за приоритет оператора и асоцијативност помоћ у писању кода без грешака и повећање читљивости кода.

Овај чланак пружа свеобухватан водич који ће вам помоћи да научите о асоцијативности и приоритету оператора у Ц.

Приоритет оператера у Ц

Приоритет оператера описује секвенцу у којој се процењује неколико оператора током евалуације израза. На пример, ако израз има и операторе сабирања и множења, који од њих треба прво проценити? Одговор је једноставан, Ц следи одређена правила да би решио такву двосмисленост, опште познату као приоритет оператора . У Ц, приоритет оператора је класификован у 17 нивоа, у распону од унарних оператора до тернарног условног оператора. Најчешће коришћени оператори као што су аритметички оператори, релациони оператори, логички оператори и битски оператори прате Ц стандард приоритет оператора протокола.







Предност правила диктирају који оператори имају већи приоритет од других приликом процене израза. Неколико типова оператора у програмском језику Ц има различите степене предност . На пример, унарни оператори имају већи приоритет од бинарних оператора. Следи листа оператора сортираних узлазним редоследом од предност :



Оператер Значење оператора Асоцијативност
()
[]
->
.
Функционални позив

Референца елемента низа



Индиректан избор чланова





Директан избор чланова

С лева надесно
!
~
+

++

&
*
величина
(тип)
Логичка негација

Комплемент у битовима (1).

Унари плус

Унарни минус

Повећање

Декремент

Дереференца (адреса)

Референца показивача

Враћа величину објекта

Типецаст (конверзија)

Десна на лево
*
/
%
Помножите

Подела

Остатак

С лева надесно
+
Бинарни плус (додатак)

Бинарни минус (одузимање)

С лева надесно
<<
>>
Лева смена

Десна смена

С лева надесно
<
<=
>
>=
Мање од

Мање или једнако

Веће од

Веће или једнако

С лева надесно
==
!=
Једнако

Неједнако са

С лева надесно
& Битвисе АНД С лева надесно
^ Ексклузивно ОР С лева надесно
| Битвисе ОР С лева надесно
&& Логично И С лева надесно
|| Логично ОР С лева надесно
?: Условни оператор Десна на лево
=
*=
/=
%=
+=
-=
&=
^=
|=
<<=
>>=
Једноставан задатак

Додели производ

Додели количник

Додели остатак

Додели суму

Додели разлику

Додели битско И

Додели битни КСОР

Додели битовско ОР

Додели леви помак

Додели десни помак

Десна на лево
, Раздвајач израза С лева надесно

Ова правила воде компајлера како да процени изразе са више оператора у истом изразу. Оператор множења, на пример, има већи приоритет од оператора сабирања у једначини А + Б * Ц, у складу са предност Правила. Због тога ће компајлер прво проценити израз Б * Ц пре него што дода А резултату.

Погледајмо пример приоритет оператора преко кода.

#инцлуде <стдио.х>

инт главни ( ) {

инт а = 43 , б = Једанаест , ц = 16 , д = 31 ;

инт резултат = ++ а * б -- + ц / -- д ;

принтф ( 'а = %д ' , а ) ;

принтф ( „б = %д ' , б ) ;

принтф ( 'ц = %д ' , ц ) ;

принтф ( „д = %д ' , д ) ;

принтф ( 'резултат = %д ' , резултат ) ;

повратак 0 ;

}

Четири променљиве а, б, ц и д су декларисане у горњем коду, а њихове почетне вредности су 43, 11, 16 и 31 сходно томе. Затим примењује разне аритметичке операторе и операторе додељивања на ове променљиве у изразу. Израз повећава вредност а коришћењем оператора пре-инкремента ++а, множи резултат са оператором пост-декремента б–, а затим додаје резултат на дељење ц са претходно смањеном вредношћу д. (користећи оператор пре декремента –д). Променљиви резултат се затим користи за задржавање укупног исхода овог израза.

Излаз

Асоцијативност у Ц

Асоцијативност односи се на редослед којим се оператори вреднују током израза са истим приоритетом. С лева на десно и здесна налево асоцијативност су два облика асоцијативности у Ц. Ако два оператора имају исте предност , процењују се с лева на десно према концепту с лева на десно асоцијативност . Ипак, ако се посматра исти приоритет, оператори се процењују с десна на лево у складу са здесна налево асоцијативност .

На пример, оператор повећања ++ има здесна налево асоцијативност , што значи прираст оператер се вреднује после променљиве. Док је логично И оператер има слева надесно асоцијативност , што значи да се оператор процењује с лева на десно.

#инцлуде <стдио.х>

инт маин() {

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

инт резултат = а * б / ц;

принтф( 'резултат = %д ' , резултат);

повратак 0 ;

}

Три променљиве а, б и ц су декларисане у овом коду и иницијализоване су на 6, 3 и 2 респективно. Затим примењује операције множења и дељења на ове променљиве у изразу. Множење и дељење се рангирају с лева на десно у Ц на основу њиховог асоцијативност пошто имају исти ниво првенства. Ово указује на то да је прва операција дељења, а затим операција множења када се процењује израз, а * б / ц.

Излаз

Закључак

Приоритет оператера и асоцијативност су кључни концепти у Ц програмирању који помажу у одређивању редоследа извршавања израза. Оператери са највишим предност ниво се прво вреднују и асоцијативност правила помажу у одређивању редоследа када се користи више оператора са истим приоритетом. Разумевање приоритет оператора и асоцијативност је од суштинског значаја при дизајнирању сложених програма и помаже у производњи чистијег и ефикаснијег кода са мање грешака.