Ez a cikk egy átfogó oktatóanyagot tartalmaz, amely segít az asszociativitás és az operátorok elsőbbségének megismerésében a C nyelvben.
Operátori elsőbbség a C-ben
Üzemeltetői elsőbbség azt a sorozatot írja le, amelyben több operátor kiértékelése történik a kifejezések kiértékelése közben. Például, ha egy kifejezésnek összeadási és szorzási operátorai is vannak, melyiket kell először kiértékelni? A válasz egyszerű, a C bizonyos szabályokat követ az ilyen kétértelműségek feloldására, amelyeket általában ún operátori elsőbbség . C-ben, operátori elsőbbség 17 szintre van besorolva, az unáris operátoroktól a hármas feltételes operátorig. A leggyakrabban használt operátorok, például aritmetikai operátorok, relációs operátorok, logikai operátorok és bitenkénti operátorok a C szabványt követik operátori elsőbbség jegyzőkönyv.
Elsőbbség A szabályok azt határozzák meg, hogy a kifejezések kiértékelésekor mely operátoroknak van magasabb prioritása, mint másoknak. A C programozási nyelvben számos operátortípus eltérő mértékű elsőbbség . Például az unáris operátorok nagyobb prioritást élveznek, mint a bináris operátorok. Az alábbiakban az operátorok listája látható növekvő sorrendben elsőbbség :
Operátor | Kezelő jelentése | Az asszociativitás |
() [] -> . |
Funkcionális hívás Tömbelem hivatkozás Közvetett tagválasztás Közvetlen tagválasztás |
Balról jobbra |
! ~ + – ++ — & * mérete (típus) |
Logikai tagadás Bitenkénti (1-es) komplementer Egyedülálló plusz Egyedi mínusz Növekedés Csökkenés Hivatkozás (cím) Mutató hivatkozás Egy objektum méretét adja vissza Typecast (konverzió) |
Jobbról balra |
* / % |
Szorozni Feloszt Maradék |
Balról jobbra |
+ – |
Bináris plusz (kiegészítés) Bináris mínusz (kivonás) |
Balról jobbra |
<< >> |
Bal Shift Jobb váltás |
Balról jobbra |
< <= > >= |
Kevesebb, mint Kisebb vagy egyenlő Nagyobb, mint Nagyobb vagy egyenlő |
Balról jobbra |
== != |
Egyenlő Nem egyenlő |
Balról jobbra |
& | Bitenként ÉS | Balról jobbra |
^ | Bitenkénti exkluzív VAGY | Balról jobbra |
| | Bitenkénti VAGY | Balról jobbra |
&& | Logikus ÉS | Balról jobbra |
|| | Logikus VAGY | Balról jobbra |
?: | Feltételes kezelő | Jobbról balra |
= *= /= %= += -= &= ^= |= <<= >>= |
Egyszerű feladat Termék hozzárendelése Hányados hozzárendelése A maradék hozzárendelése Összeg hozzárendelése Különbség hozzárendelése Bitenkénti ÉS hozzárendelése Bitenkénti XOR hozzárendelése Hozzárendelés bitenként VAGY Balra eltolás hozzárendelése Jobb műszak hozzárendelése |
Jobbról balra |
, | Kifejezések elválasztója | Balról jobbra |
Ezek a szabályok útmutatást adnak a fordítónak, hogyan értékelje ki a több operátort tartalmazó kifejezéseket ugyanabban a kifejezésben. A szorzó operátor például nagyobb prioritást élvez, mint az összeadás operátor az A + B * C egyenletben, a elsőbbség szabályokat. Ezért a fordító először kiértékeli a B * C kifejezést, mielőtt A-t adna az eredményhez.
Nézzünk egy példát arra operátori elsőbbség kódon keresztül.
#includeint fő- ( ) {
int a = 43 , b = tizenegy , c = 16 , d = 31 ;
int eredmény = ++ 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 ( 'eredmény = %d \n ' , eredmény ) ;
Visszatérés 0 ;
}
A négy a, b, c és d változót a fenti kód deklarálja, kezdeti értékeik ennek megfelelően 43, 11, 16 és 31. Ezután számos aritmetikai és hozzárendelési operátort alkalmaz ezekre a változókra egy kifejezésben. A kifejezés növeli a értékét a ++a növelés előtti operátor használatával, az eredményt megszorozza a csökkentés utáni b– operátorral, majd hozzáadja az eredményt a c osztásához d előre csökkentett értékével. (a csökkentés előtti operátor –d használatával). Ezután az eredmény változót használjuk a kifejezés teljes eredményének megtartására.
Kimenet
Az asszociativitás C-ben
Az asszociativitás arra a sorrendre utal, amelyben az operátorok kiértékelése történik egy azonos prioritású kifejezés során. Balról jobbra és jobbról balra asszociativitás az asszociativitás két formája C-ben. Ha két operátornak ugyanaz elsőbbség , balról jobbra értékelik a balról jobbra haladó fogalma szerint asszociativitás . Mindazonáltal, ha ugyanaz a precedencia figyelhető meg, az operátorok jobbról balra kerülnek kiértékelésre a jobbról balra asszociativitás .
Például a ++ növekmény operátor jobbról balra halad asszociativitás , ami a növekedést jelenti operátor változó után kerül kiértékelésre. Míg a logikai ÉS operátor balról jobbra irányú asszociativitás , ami azt jelenti, hogy az operátor balról jobbra kerül kiértékelésre.
#includeint main() {
int a = 6 , b = 3 , c = 2 ;
int eredmény = a * b / c;
printf( 'eredmény = %d \n ' , eredmény);
Visszatérés 0 ;
}
A három a, b és c változót ebben a kódban deklarálják, és rendre 6-ra, 3-ra és 2-re inicializálják. Ezután szorzási és osztási műveleteket alkalmaz ezekre a változókra egy kifejezésben. A szorzást és az osztást a C-ben balról jobbra rangsorolják azok alapján asszociativitás mivel azonos elsőbbségi szinttel rendelkeznek. Ez azt jelzi, hogy az osztási művelet az első, majd a szorzási művelet az a * b / c kifejezés kiértékelésénél.
Kimenet
Következtetés
Üzemeltetői elsőbbség és asszociativitás kulcsfontosságú fogalmak a C programozásban, amelyek segítenek meghatározni a kifejezések végrehajtási sorrendjét. Operátorok a legmagasabb elsőbbség szinten értékelik először és asszociativitás A szabályok segítenek meghatározni a sorrendet, ha több, azonos prioritású operátort használnak. Megértés operátori elsőbbség és asszociativitás elengedhetetlen az összetett programok tervezésénél, és segít tisztább és hatékonyabb kód előállítását kevesebb hibával.