Los distintos operadores permiten formar expresiones tanto aritm�ticas como l�gicas. Los operadores aritm�ticos y l�gicos son:
Operadores | Descripci�n |
---|---|
+, - | Suma, resta |
++, -- | Incremento, decremento |
*, /, % | Multiplicaci�n, divisi�n, m�dulo |
>>, << | Rotaci�n de bits a la derecha, izquierda. |
& | AND booleano |
| | OR booleano |
^ | XOR booleano |
~ | Complemento a 1 |
! | Complemento a 2, NOT l�gico |
==, != | Igualdad, desigualdad |
&&, || | AND, OR l�gico |
<, <= | Menor, menor o igual |
>, >= | Mayor, mayor o igual |
En estos operadores deben tenerse en cuenta la precedencia de operadores y las reglas de asociatividad, que son las normales en la mayor�a de lenguajes. Se debe consultar el manual de referencia para obtener una explicaci�n detallada. Adem�s hay toda una serie de operadores aritm�ticos con asignaci�n, como pueden ser += y ^=.
En la evaluaci�n de expresiones l�gicas, los compiladores normalmente utilizan t�cnicas de evaluaci�n r�pida. Para decidir si una expresi�n l�gica es cierta o falsa muchas veces no es necesario evaluarla completamente. Por ejemplo una expresi�n formada <exp1> || <exp2>, el compilador eval�a primero <exp1> y si es cierta, no eval�a <exp2>. Por ello se deben evitar construcciones en las que se modifiquen valores de datos en la propia expresi�n, pues su comportamiento puede depender de la implementaci�n del compilador o de la optimizaci�n utilizada en una compilaci�n o en otra. Estos son errores que se pueden cometer f�cilmente en C ya que una asignaci�n es tambi�n una expresi�n.
Debemos evitar: if (( x++ > 3 ) || ( x < y ))
y escribir en su lugar: x++; if (( x > 3 ) || ( x < y ))
Hay un tipo especial de expresi�n en C que se denomina expresi�n condicional y est� representada por los operadores ? : . Su utilizaci�n es como sigue: <e> ? <x> : <y>. Se eval�a si e entonces x; si no, y.
int mayor ( int a, int b ) { return ( a > b ) ? TRUE : FALSE; } waste_time () { float a, b = 0.0; ( b > 0.0 ) ? sin(M_PI / 8) : cos(M_PI / 4); }