Tento článek poskytuje komplexní tutoriál, který vám pomůže naučit se asociativitu a prioritu operátorů v C.
Přednost operátora v C
Přednost operátora popisuje sekvenci, ve které je několik operátorů vyhodnocováno při vyhodnocování výrazů. Pokud má například výraz operátory sčítání i násobení, který z nich by měl být vyhodnocen jako první? Odpověď je jednoduchá, C se řídí určitými pravidly pro vyřešení takové nejednoznačnosti, běžně známé jako přednost operátora . v C, přednost operátora je klasifikován do 17 úrovní, od unárních operátorů po ternární podmíněný operátor. Nejpoužívanější operátory jako aritmetické operátory, relační operátory, logické operátory a bitové operátory se řídí standardem C přednost operátora protokol.
Přednost pravidla určují, které operátory mají při vyhodnocování výrazů vyšší prioritu než ostatní. Několik typů operátorů v programovacím jazyce C má různé stupně přednost . Například unární operátory mají větší prioritu než binární operátory. Následuje seznam operátorů seřazených ve vzestupném pořadí přednost :
Operátor | Význam operátora | Asociativnost |
() [] -> . |
Funkční volání Odkaz na prvek pole Nepřímý výběr členů Přímý výběr členů |
Zleva do prava |
! ~ + – ++ — & * velikost (typ) |
Logická negace Bitový (1) doplněk Unární plus Unární mínus Přírůstek Dekrementovat Dereference (adresa) Odkaz na ukazatel Vrátí velikost objektu Typecast (konverze) |
Zprava doleva |
* / % |
Násobit Rozdělit Zbytek |
Zleva do prava |
+ – |
Binární plus (sčítání) Binární mínus (odčítání) |
Zleva do prava |
<< >> |
Levý Shift Pravý posun |
Zleva do prava |
< <= > >= |
Méně než Menší nebo rovno Větší než Větší nebo rovno |
Zleva do prava |
== != |
Rovná Nerovná se |
Zleva do prava |
& | Bitové AND | Zleva do prava |
^ | Bitově exkluzivní OR | Zleva do prava |
| | Bitově NEBO | Zleva do prava |
&& | Logické AND | Zleva do prava |
|| | Logické NEBO | Zleva do prava |
?: | Podmíněný operátor | Zprava doleva |
= *= /= %= += -= &= ^= |= <<= >>= |
Jednoduché zadání Přiřadit produkt Přiřadit kvocient Přiřadit zbytek Přiřadit součet Přiřadit rozdíl Přiřaďte bitově AND Přiřadit bitový XOR Přiřadit bitové NEBO Přiřadit levou směnu Přiřadit pravý posun |
Zprava doleva |
, | Oddělovač výrazů | Zleva do prava |
Tato pravidla vedou kompilátor, jak vyhodnotit výrazy s více operátory ve stejném výrazu. Například operátor násobení má větší přednost než operátor sčítání v rovnici A + B * C, v souladu s přednost pravidla. Proto kompilátor nejprve vyhodnotí výraz B * C, než přidá A k výsledku.
Podívejme se na příklad přednost operátora prostřednictvím kódu.
#includeint hlavní ( ) {
int A = 43 , b = jedenáct , C = 16 , d = 31 ;
int výsledek = ++ 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ýsledek = %d \n ' , výsledek ) ;
vrátit se 0 ;
}
Čtyři proměnné a, b, c a d jsou deklarovány ve výše uvedeném kódu a jejich počáteční hodnoty jsou podle toho 43, 11, 16 a 31. Poté na tyto proměnné ve výrazu aplikuje různé aritmetické a přiřazovací operátory. Výraz zvýší hodnotu a pomocí operátoru před přírůstkem ++a, vynásobí výsledek operátorem po snížení b– a pak výsledek přičte k dělení c předdekrementovanou hodnotou d. (pomocí operátoru předdekrementace –d). Proměnná výsledek se pak používá k udržení celkového výsledku tohoto výrazu.
Výstup
Asociativita v C
Asociativnost odkazuje na pořadí, ve kterém jsou operátory vyhodnocovány během výrazu se stejnou prioritou. Zleva doprava a zprava doleva asociativnost jsou dvě formy asociativity v C. Pokud mají dva operátory totéž přednost , posuzují se zleva doprava podle konceptu zleva doprava asociativnost . Nicméně, pokud je dodržena stejná priorita, jsou operátory hodnoceny zprava doleva podle zprava doleva asociativnost .
Například operátor přírůstku ++ má zprava doleva asociativnost , což znamená přírůstek operátor se vyhodnocuje za proměnnou. Zatímco logické AND operátor má zleva doprava asociativnost , což znamená, že operátor je vyhodnocen zleva doprava.
#includeint main() {
int a = 6 , b = 3 , c = 2 ;
int vysledek = a * b / c;
printf( 'výsledek = %d \n ' , výsledek);
vrátit se 0 ;
}
V tomto kódu jsou deklarovány tři proměnné a, b a c, které jsou inicializovány na 6, 3 a 2. Poté na tyto proměnné ve výrazu aplikuje operace násobení a dělení. Násobení a dělení jsou seřazeny zleva doprava v C na základě jejich asociativnost protože mají stejnou úroveň priority. To znamená, že operace dělení je na prvním místě, následovaná operací násobení při vyhodnocování výrazu a * b / c.
Výstup
Závěr
Přednost operátora a asociativnost jsou klíčové pojmy v programování C, které pomáhají určit pořadí provádění výrazů. Operátoři s nejvyšší přednost úrovně se hodnotí jako první a asociativnost pravidla pomáhají určit pořadí při použití více operátorů se stejnou prioritou. Porozumění přednost operátora a asociativnost je nezbytný při navrhování složitých programů a pomáhá vytvářet čistší a efektivnější kód s menším počtem chyb.