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.
#includeint 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.
#includeint 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.