Després d'analitzar les variables i constants en el capítol anterior, l'objectiu d'aquest capítol és veure com es poden combinar les variables i constants esmentades per a formar expressions.
En el llenguatge C s'utilitza un operador per a representar una operació. La combinació de variables i/o constants amb els agents dóna lloc a expressions que consisteixen en una o diverses expressions, combinades amb els agents, en una ordre. Hi ha molts més que els operadors = (assignació) + (suma) – (resta) i * (multiplicació) que hem utilitzat en els programes dels capítols anteriors. Abans d'analitzar un a un, analitzarem dues característiques principals dels agents: la prioritat i la compatibilitat.
Quan hi ha més d'un agent en una expressió, l'ordre d'avaluació depèn de la prioritat dels agents. Es realitzen les operacions de major prioritat obtenint els primers resultats de treball. Posteriorment, i seguint l'ordre decreixent de prioritat, s'apliquen els següents agents sobre els resultats de treball anteriors. Els parèntesis, igual que en altres llenguatges, modifiquen l'ordre de l'avaluació. Per exemple, l'avaluació de 2 + 3 * 4 genera 14 perquè la multiplicació té un grau de prioritat major que la suma.
La convergència ens diu com es realitza l'avaluació, d'esquerra a dreta o viceversa. Per exemple, mentre l'operador té la compatibilitat dreta esquerra, els operadors aritmètics comuns (+, –, *) tenen la d'esquerra a dreta.
a = b = c
s'avalua per la dreta. Per tant, b primer i a després prenen el valor de c.
a + b - c
per contra, s'avaluarà d'esquerra a dreta. En la taula 1 es mostren els agents més rellevants i la seva compatibilitat en ordre de prioritat.
Analitzarem els agents que apareixen en la taula.
Com es pot observar en la Taula 2, al marge de les operacions habituals, es presenten altres dues, l'increment i el decrement. En tots dos casos es produeix l'assignació i encara que es poden expressar d'una altra manera, s'han introduït dins del llenguatge C en llaures a la comoditat i eficàcia, a vegades difícils de llegir els programes.
Cal destacar l'existència d'un únic agent per a la divisió, tant total com real (enfront del PASCAL, div i / o operadors es diferencien). Si els operands són complets, el resultat serà el de la totalitat de la divisió i en la resta el real (veure taula 3).
El mòdul, l'operador%, només es pot utilitzar amb operands complets.
Exemple:
Condició nombre parell (x 2%) = = Ø
Entre les característiques del llenguatge C es troba la capacitat de captura de bits, per a això es disposa dels agents descrits en la taula 4. Com és sabut, l'operació AND s'utilitza per a posar diversos bits en Ø, per a posar l'operació OR en estat 1 i canviar l'estat xor (bits). Per a això s'aparella una variable tipus caràcter (8 bits), short (16 bits) o long (32 bits) amb una màscara indicada en hexadecimal (prefix Øx). Als bits que es volen mantenir en la màscara se'ls assigna el valor Ø i als quals es volen posar en un (OR) o canviar (XOR) el valor. L'operació AND es realitza a l'inrevés i per a això es pot utilitzar l'operador.
Per exemple, si la variable n està composta per 8 bits (sense conèixer el seu valor) i es col·loca en un bit a l'esquerra, es posa a zero la dreta i es volen canviar els dues centrals, es deu:
n = n | Øx8Ø n = n ( ØxØ1) n = n^ Øx18 | /* n ?ó /* n ?ó /* n ?ó | xxxx xxxx */ 1xxx xxxx */ 1xxx xxx Ø */ 1xxx– x–xxØ */ |
Els desplaçaments serveixen sobretot per a utilitzar el maneig de bits en estructures repetitives, com veurem en el capítol 5.
Els operadors relacionals s'utilitzen principalment per a representar les condicions (veure taula 5). En qualsevol cas, el llenguatge C pot ser qualsevol condició d'expressió; l'assignació, ...
Quan una expressió no relacional és condició, l'avaluació de l'expressió es considera falsa quan Ø és i en la resta dels casos com a veritable. Per això, cal tenir molta cura amb la relació d'igualtat, ja que és molt fàcil posar = = en lloc de = (assignació), com es fa en altres llenguatges. En conseqüència, el resultat de la condició a verificar dependrà del valor assignat.
int n = Ø
if (n=Ø) /* sempre falsa, ja que l'assignació és */ if (n = Ø) /* en aquest cas la veritat és n Ø ja */
Cal destacar que les cadenes de caràcters no es poden combinar amb els operadors observats, ja que les cadenes de caràcters no són dades bàsiques (veure capítol 7).
Aquests agents tenen molt a veure amb les estructures de dades i els demostradors i s'aprofundirà en el capítol 7 (veure taula 6).
Aquests agents combinen una operació amb l'assignació, sent el resultat i l'operand 1 sempre la mateixa variable. D'aquesta forma es pot substituir x=x+per x+= a, x=x 3 per x =3 etc.
Aquests agents són:
+= % = | –= = | *= |= | /= = |