Co je priorita a asociativita operátorů C

Co Je Priorita A Asociativita Operatoru C



Operátory se běžně používají k provádění různých aritmetických a logických operací v C. Programovací jazyk C se řídí specifickým pořadím známým jako přednost operátora a asociativnost určit pořadí operací během provádění. Pravidla pro přednost operátora a asociativnost pomáhá při psaní bezchybného kódu a zvyšuje čitelnost kódu.

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.

#include

int 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.

#include

int 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.