Što je prvenstvo C operatora i asocijativnost

Sto Je Prvenstvo C Operatora I Asocijativnost



Operatori se obično koriste za izvođenje raznih aritmetičkih i logičkih operacija u C-u. Programski jezik C slijedi određeni redoslijed poznat kao prednost operatora i asocijativnost za određivanje redoslijeda operacija tijekom izvođenja. Pravila prednost operatora i asocijativnost pomoć u pisanju koda bez grešaka i povećanje čitljivosti koda.

Ovaj članak pruža opsežan vodič koji će vam pomoći u učenju o asocijativnosti i prednosti operatora u C-u.

Prioritet operatora u C

Prioritet operatora opisuje slijed u kojem se procjenjuje nekoliko operatora dok se procjenjuju izrazi. Na primjer, ako izraz ima i operatore zbrajanja i množenja, koji od njih treba prvi procijeniti? Odgovor je jednostavan, C slijedi određena pravila za rješavanje takve dvosmislenosti, općenito poznata kao prednost operatora . U C, prednost operatora je razvrstan u 17 razina, u rasponu od unarnih operatora do ternarnog uvjetnog operatora. Većina korištenih operatora kao što su aritmetički operatori, relacijski operatori, logički operatori i bitovni operatori slijede standard C prednost operatora protokol.







Prednost pravila diktiraju koji operatori imaju veći prioritet od ostalih pri procjeni izraza. Nekoliko vrsta operatora u programskom jeziku C ima različite stupnjeve prednost . Na primjer, unarni operatori imaju veći prioritet od binarnih operatora. Slijedi popis operatora poredanih uzlaznim redoslijedom od prednost :



Operater Značenje operatora Asocijativnost
()
[]
->
.
Funkcionalni poziv

Referenca elementa polja



Neizravni izbor članova





Izravan odabir članova

S lijeva nadesno
!
~
+

++

i
*
veličina
(tip)
Logička negacija

Komplement po bitovima (1).

Unarni plus

Unarni minus

Povećanje

Smanjenje

Dereferenciranje (adresa)

Referenca pokazivača

Vraća veličinu objekta

Typecast (pretvorba)

S desna na lijevo
*
/
%
Pomnožiti

Podijeliti

Ostatak

S lijeva nadesno
+
Binarni plus (zbrajanje)

Binarni minus (oduzimanje)

S lijeva nadesno
<<
>>
Lijevi pomak

Desni pomak

S lijeva nadesno
<
<=
>
>=
Manje od

Manje od ili jednako

Veći od

Veće ili jednako

S lijeva nadesno
==
!=
Jednak

Nije jednako

S lijeva nadesno
i Bitno I S lijeva nadesno
^ Bitno isključivi OR S lijeva nadesno
| Bitno OR S lijeva nadesno
&& Logično I S lijeva nadesno
|| Logički ILI S lijeva nadesno
?: Uvjetni operator S desna na lijevo
=
*=
/=
%=
+=
-=
&=
^=
|=
<<=
>>=
Jednostavan zadatak

Dodijeli proizvod

Dodijeli kvocijent

Dodijeli ostatak

Dodijeli zbroj

Dodijeli razliku

Dodijeli bitovi I

Dodijeli bitwise XOR

Dodijeli bitwise OR

Dodjela lijevog pomaka

Dodijelite desni pomak

S desna na lijevo
, Razdjelnik izraza S lijeva nadesno

Ova pravila usmjeravaju prevoditelj kako procijeniti izraze s višestrukim operatorima u istom izrazu. Operator množenja, na primjer, ima veću prednost od operatora zbrajanja u jednadžbi A + B * C, u skladu s prednost pravila. Stoga će prevodilac prvo evaluirati izraz B * C prije dodavanja A rezultatu.

Pogledajmo primjer prednost operatora kroz kod.

#include

int glavni ( ) {

int a = 43 , b = jedanaest , c = 16 , d = 31 ;

int proizlaziti = ++ 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 ( 'rezultat = %d \n ' , proizlaziti ) ;

povratak 0 ;

}

Četiri varijable a, b, c i d deklarirane su u gornjem kodu, a njihove početne vrijednosti su 43, 11, 16 i 31 prema tome. Zatim primjenjuje razne aritmetičke i operatore dodjele na ove varijable u izrazu. Izraz povećava vrijednost a pomoću operatora predinkrementiranja ++a, množi ishod s operatorom postdekrementiranja b–, a zatim dodaje ishod dijeljenju c s prethodno dekrementiranom vrijednošću d. (koristeći operator preddekrementiranja –d). Varijabla rezultat se zatim koristi za držanje ukupnog ishoda ovog izraza.

Izlaz

Asocijativnost u C

Asocijativnost odnosi se na redoslijed kojim se operatori procjenjuju tijekom izraza s istim prvenstvom. Slijeva na desno i zdesna na lijevo asocijativnost su dva oblika asocijativnosti u C. Ako dva operatora imaju isti prednost , ocjenjuju se slijeva na desno prema konceptu slijeva nadesno asocijativnost . Unatoč tome, ako se promatra isti prioritet, operatori se procjenjuju s desna na lijevo prema zdesna nalijevo asocijativnost .

Na primjer, operator povećanja ++ ima zdesna nalijevo asocijativnost , što znači prirast operater se vrednuje nakon varijable. Dok je logično I operater ima slijeva nadesno asocijativnost , što znači da se operator procjenjuje s lijeva na desno.

#include

int main() {

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

int rezultat = a * b / c;

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

povratak 0 ;

}

Tri varijable a, b i c su deklarirane u ovom kodu i inicijalizirane su na 6, 3 i 2 redom. Zatim primjenjuje operacije množenja i dijeljenja na te varijable u izrazu. Množenje i dijeljenje poredani su slijeva nadesno u C na temelju njihovog asocijativnost budući da imaju istu razinu prvenstva. To znači da operacija dijeljenja dolazi prva, a nakon nje operacija množenja pri vrednovanju izraza, a * b / c.

Izlaz

Zaključak

Prioritet operatora i asocijativnost ključni su koncepti u C programiranju koji pomažu odrediti redoslijed izvođenja izraza. Operatori s najvišim prednost razina se prvo ocjenjuju i asocijativnost pravila pomažu odrediti redoslijed kada se koristi više operatora s istim prvenstvom. Razumijevanje prednost operatora i asocijativnost ključan je pri dizajniranju složenih programa i pomaže u izradi čišćeg i učinkovitijeg koda s manje pogrešaka.