Aquest article ofereix un tutorial complet per ajudar-vos a aprendre sobre l'associativitat i la precedència d'operadors en C.
Precedència de l'operador a C
Precedència de l'operador descriu la seqüència en què s'avaluen diversos operadors mentre s'avaluen expressions. Per exemple, si una expressió té operadors de suma i multiplicació, quin s'hauria d'avaluar primer? La resposta és senzilla, C segueix determinades regles per resoldre aquesta ambigüitat, comunament coneguda com precedència de l'operador . En C, precedència de l'operador es classifica en 17 nivells, que van des d'operadors unaris fins a l'operador condicional ternari. Els operadors més utilitzats com els operadors aritmètics, els operadors relacionals, els operadors lògics i els operadors per bit segueixen l'estàndard C precedència de l'operador protocol.
Precedència les regles dicten quins operadors tenen més prioritat que els altres a l'hora d'avaluar expressions. Diversos tipus d'operadors en el llenguatge de programació C tenen diferents graus de precedència . Per exemple, els operadors unaris tenen una prioritat més gran que els operadors binaris. A continuació es mostra una llista d'operadors ordenats en ordre ascendent de precedència :
Operador | Significat d'operador | Associativitat |
() [] -> . |
Crida funcional Referència d'elements de matriu Selecció indirecta de membres Selecció directa de membres |
Esquerra a dreta |
! ~ + – ++ — & * mida de (tipus) |
Negació lògica Complement de bits (1). Plus unari Menys unari Increment Decrement Desreferència (adreça) Referència del punter Retorna la mida d'un objecte Typecast (conversió) |
De dreta a esquerra |
* / % |
Multiplicar Divideix La resta |
Esquerra a dreta |
+ – |
Plus binari (suma) Menys binari (resta) |
Esquerra a dreta |
<< >> |
Desviació a l'esquerra Canvi a la dreta |
Esquerra a dreta |
< <= > >= |
Menys que Menys o igual Més gran que Major o igual |
Esquerra a dreta |
== != |
Igual a No igual a |
Esquerra a dreta |
& | I per bits | Esquerra a dreta |
^ | OR exclusiu per bits | Esquerra a dreta |
| | O per bits | Esquerra a dreta |
&& | I lògic | Esquerra a dreta |
|| | OR lògic | Esquerra a dreta |
?: | Operador condicional | De dreta a esquerra |
= *= /= %= += -= &= ^= |= <<= >>= |
Encàrrec senzill Assignar producte Assigna un quocient Assigna la resta Assignar suma Assigna la diferència Assigna AND per bits Assigna XOR per bits Assigneu OR per bits Assigna el torn a l'esquerra Assigna el torn dret |
De dreta a esquerra |
, | Separador d'expressions | Esquerra a dreta |
Aquestes regles guien el compilador sobre com avaluar expressions amb diversos operadors en la mateixa expressió. L'operador de multiplicació, per exemple, té més prioritat que l'operador d'addició en l'equació A + B * C, d'acord amb el precedència regles. Per tant, el compilador avaluarà primer l'expressió B * C abans d'afegir A al resultat.
Vegem-ne un exemple precedència de l'operador mitjançant codi.
#inclouint principal ( ) {
int a = 43 , b = 11 , c = 16 , d = 31 ;
int resultat = ++ a * b -- + c / -- d ;
imprimirf ( 'a = %d \n ' , a ) ;
imprimirf ( 'b = %d \n ' , b ) ;
imprimirf ( 'c = %d \n ' , c ) ;
imprimirf ( 'd = %d \n ' , d ) ;
imprimirf ( 'resultat = %d \n ' , resultat ) ;
tornar 0 ;
}
Les quatre variables a, b, c i d es declaren al codi anterior i els seus valors inicials són 43, 11, 16 i 31 en conseqüència. A continuació, aplica una varietat d'operadors aritmètics i d'assignació a aquestes variables en una expressió. L'expressió augmenta el valor de a utilitzant l'operador pre-increment ++a, multiplica el resultat per l'operador post-decrement b–, i després afegeix el resultat a la divisió c pel valor pre-decrementat de d. (utilitzant l'operador de pre-disminució –d). Aleshores, el resultat variable s'utilitza per mantenir el resultat total d'aquesta expressió.
Sortida
Associativitat en C
Associativitat fa referència a l'ordre en què s'avaluen els operadors durant una expressió amb la mateixa precedència. D'esquerra a dreta i de dreta a esquerra associativitat són les dues formes d'associativitat en C. Si dos operadors tenen el mateix precedència , s'avaluen d'esquerra a dreta segons el concepte d'esquerra a dreta associativitat . No obstant això, si s'observa la mateixa precedència, els operadors s'avaluen de dreta a esquerra segons de dreta a esquerra. associativitat .
Per exemple, l'operador d'increment ++ té de dreta a esquerra associativitat , que significa l'increment operador s'avalua després de la variable. Mentre que el AND lògic operador té una esquerra a dreta associativitat , que significa que l'operador s'avalua d'esquerra a dreta.
#inclouint main() {
int a = 6 , b = 3 , c = 2 ;
int resultat = a * b / c;
printf( 'resultat = %d \n ' , resultat);
tornar 0 ;
}
Les tres variables a, b i c es declaren en aquest codi i s'inicien a 6, 3 i 2 respectivament. A continuació, aplica operacions de multiplicació i divisió a aquestes variables en una expressió. La multiplicació i la divisió es classifiquen d'esquerra a dreta en C en funció de la seva associativitat ja que tenen el mateix nivell de precedència. Això indica que l'operació de divisió és la primera, seguida de l'operació de multiplicació quan s'avalua l'expressió, a * b / c.
Sortida
Conclusió
Precedència de l'operador i associativitat són conceptes crucials en la programació en C que ajuden a determinar l'ordre d'execució de les expressions. Operadors amb el més alt precedència primer s'avaluen el nivell i associativitat les regles ajuden a determinar l'ordre quan s'utilitzen diversos operadors amb la mateixa prioritat. Comprensió precedència de l'operador i associativitat és essencial a l'hora de dissenyar programes complexos i ajuda a produir un codi més net i eficient amb menys errors.