Què és la precedència i l'associativitat de l'operador C

Que Es La Precedencia I L Associativitat De L Operador C



Els operadors s'utilitzen habitualment per realitzar diverses operacions aritmètiques i lògiques en C. El llenguatge de programació C segueix un ordre específic conegut com precedència de l'operador i associativitat determinar l'ordre de les operacions durant l'execució. Les regles de precedència de l'operador i associativitat ajudar a escriure codi sense errors i augmentar la llegibilitat del codi.

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.

#inclou

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

#inclou

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