Čo je priorita a asociativita operátora C

Co Je Priorita A Asociativita Operatora C



Operátory sa bežne používajú na vykonávanie rôznych aritmetických a logických operácií v jazyku C. Programovací jazyk C sa riadi špecifickým poradím známym ako prednosť operátora a asociatívnosť určiť poradie operácií počas vykonávania. Pravidlá pre prednosť operátora a asociatívnosť pomáhajú pri písaní bezchybného kódu a zvyšujú čitateľnosť kódu.

Tento článok poskytuje komplexný návod, ktorý vám pomôže dozvedieť sa o asociativite a priorite operátorov v jazyku C.

Prednosť operátora v C

Prednosť operátora popisuje postupnosť, v ktorej sa vyhodnocujú viaceré operátory pri vyhodnocovaní výrazov. Napríklad, ak výraz obsahuje operátory sčítania aj násobenia, ktorý z nich by sa mal vyhodnotiť ako prvý? Odpoveď je jednoduchá, C dodržiava určité pravidlá na vyriešenie takejto nejednoznačnosti, bežne známej ako prednosť operátora . V C, prednosť operátora je klasifikovaný do 17 úrovní, od unárnych operátorov po ternárny podmienený operátor. Najpoužívanejšie operátory ako aritmetické operátory, relačné operátory, logické operátory a bitové operátory sa riadia štandardom C prednosť operátora protokol.







Prednosť pravidlá určujú, ktoré operátory majú pri vyhodnocovaní výrazov vyššiu prioritu ako ostatné. Niekoľko typov operátorov v programovacom jazyku C má rôzne stupne prednosť . Napríklad unárne operátory majú väčšiu prioritu ako binárne operátory. Nasleduje zoznam operátorov zoradených vo vzostupnom poradí prednosť :



Operátor Význam operátora Asociativita
()
[]
->
.
Funkčné volanie

Odkaz na prvok poľa



Nepriamy výber členov





Priamy výber členov

Zľava doprava
!
~
+

++

&
*
veľkosť
(typ)
Logická negácia

Bitový (1) doplnok

Unárne plus

Unárne mínus

Prírastok

Dekrementovať

Dereference (adresa)

Odkaz na ukazovateľ

Vráti veľkosť objektu

Typecast (konverzia)

Zprava doľava
*
/
%
Vynásobte

Rozdeliť

Zvyšok

Zľava doprava
+
Binárne plus (doplnenie)

Binárne mínus (odčítanie)

Zľava doprava
<<
>>
Lavy shift

Pravý posun

Zľava doprava
<
<=
>
>=
Menej ako

Menšie alebo rovnaké

Väčší než

Väčšie alebo rovné

Zľava doprava
==
!=
Rovná

Nerovná sa

Zľava doprava
& Bitové AND Zľava doprava
^ Bitové exkluzívne OR Zľava doprava
| Bitové ALEBO Zľava doprava
&& Logické AND Zľava doprava
|| Logické ALEBO Zľava doprava
?: Podmienený operátor Zprava doľava
=
*=
/=
%=
+=
-=
&=
^=
|=
<<=
>>=
Jednoduché zadanie

Priradiť produkt

Priraďte kvocient

Priraďte zvyšok

Priradiť sumu

Priraďte rozdiel

Priraďte bitové AND

Priraďte bitový XOR

Priraďte bitové ALEBO

Priraďte ľavý posun

Priraďte pravý posun

Zprava doľava
, Oddeľovač výrazov Zľava doprava

Tieto pravidlá usmerňujú kompilátor, ako vyhodnotiť výrazy s viacerými operátormi v rovnakom výraze. Napríklad operátor násobenia má väčšiu prednosť ako operátor sčítania v rovnici A + B * C v súlade s prednosť pravidlá. Preto kompilátor najskôr vyhodnotí výraz B * C pred pridaním A k výsledku.

Pozrime sa na príklad prednosť operátora cez kód.

#include

int Hlavná ( ) {

int a = 43 , b = jedenásť , c = 16 , d = 31 ;

int výsledok = ++ a * b -- + c / -- d ;

printf ( 'a = %d.' \n ' , a ) ;

printf ( 'b = %d \n ' , b ) ;

printf ( 'c = %d \n ' , c ) ;

printf ( 'd = %d \n ' , d ) ;

printf ( 'výsledok = %d \n ' , výsledok ) ;

vrátiť 0 ;

}

Štyri premenné a, b, c a d sú deklarované vo vyššie uvedenom kóde a ich počiatočné hodnoty sú podľa toho 43, 11, 16 a 31. Potom na tieto premenné vo výraze aplikuje rôzne aritmetické a priraďovacie operátory. Výraz zvýši hodnotu a pomocou operátora pred prírastkom ++a, vynásobí výsledok operátorom po znížení b– a potom výsledok pridá k deleniu c preddekrementovanou hodnotou d. (pomocou operátora pred dekrementáciou –d). Premenná výsledok sa potom použije na uloženie celkového výsledku tohto výrazu.

Výkon

Asociativita v C

Asociativita odkazuje na poradie, v ktorom sú operátory vyhodnocované počas výrazu s rovnakou prioritou. Zľava doprava a sprava doľava asociatívnosť sú dve formy asociatívnosti v C. Ak majú dva operátory to isté prednosť , posudzujú sa zľava doprava podľa konceptu zľava doprava asociatívnosť . Napriek tomu, ak je dodržaná rovnaká priorita, operátori sa vyhodnocujú sprava doľava podľa sprava doľava asociatívnosť .

Napríklad operátor prírastku ++ má smer sprava doľava asociatívnosť , čo znamená prírastok operátor sa vyhodnocuje za premennou. Zatiaľ čo logické AND operátor má smer zľava doprava asociatívnosť , čo znamená, že operátor sa vyhodnocuje zľava doprava.

#include

int main() {

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

int vysledok = a * b / c;

printf( 'výsledok = %d \n ' , výsledok);

vrátiť 0 ;

}

V tomto kóde sú deklarované tri premenné a, b a c, ktoré sú inicializované na 6, 3 a 2. Potom na tieto premenné vo výraze aplikuje operácie násobenia a delenia. Násobenie a delenie sú v C zoradené zľava doprava na základe ich asociatívnosť pretože majú rovnakú úroveň prednosti. To znamená, že pri hodnotení výrazu a * b / c je na prvom mieste operácia delenia, po ktorej nasleduje operácia násobenia.

Výkon

Záver

Prednosť operátora a asociatívnosť sú kľúčové pojmy v programovaní C, ktoré pomáhajú určiť poradie vykonávania výrazov. Operátori s najvyššou prednosť úrovni sa hodnotia ako prvé a asociatívnosť pravidlá pomáhajú určiť poradie pri použití viacerých operátorov s rovnakou prioritou. Porozumenie prednosť operátora a asociatívnosť je nevyhnutný pri navrhovaní zložitých programov a pomáha vytvárať čistejší a efektívnejší kód s menším počtom chýb.