BUSCAR
INDICE
INDICE DEL TEMA
OBJETIVOS
TEORIA
PALABRAS RESERVADAS
GLOSARIO
EJERCICIOS
RESUELTOS
AUTOEVALUACION
PROPUESTOS
ERRORES
ESTADISTICAS
INICIO
FAQS
LINKS
RECOMIENDANOS
QUIENES SOMOS
MAPA DEL WEB
COLABORAR
Tema 13 Más sobre Operadores
Teoría: Precedencia

Normalmente, las expresiones con operadores se evalúan de izquierda a derecha.

Sin embargo no todos los operadores tienen la misma prioridad, algunos se evalúan antes que otros.

Esta propiedad de los operadores se conoce como precedencia o prioridad.También hay algunos operadores que se evalúan y se asocian de derecha a izquierda.

Veremos ahora las prioridades de todos los operadores. Considera esta tabla como una referencia, no es necesario aprenderla de memoria, en caso de duda siempre se puede consultar, incluso puede que cambie ligeramente según el compilador, y en último caso veremos sistemas para eludir la precedencia.

Operadores
Asociatividad
() [] -> :: .
Izquierda a derecha
Operadores unarios: ! ~ + - ++ --
&
(dirección de) * (puntero a)
sizeof new delete
Izquierda a derecha
.* ->*
Izquierda a derecha
* (multiplicación) / %
Izquierda a derecha
+ - (operadores binarios)
Izquierda a derecha
<< >> Izquierda a derecha
< <= > >=
Izquierda a derecha
== !=
Izquierda a derecha
& (bitwise AND)
Izquierda a derecha
^ (bitwise XOR)
Izquierda a derecha
| (bitwise OR)
Izquierda a derecha
&&
Izquierda a derecha
||
Izquierda a derecha
?:
Derecha a izquierda
= *= /= %= += -= &= ^= |= <<= >>=
Derecha a izquierda
,
Izquierda a derecha

La tabla muestra las precedencias de los operadores en orden decreciente, los de mayor precedencia en la primera fila. Dentro de la misma fila, la prioridad se decide por el orden de asociatividad.
int a, b, c, d, e;

b =c =d =e =10;

El operador de asignación "=" se asocia de derecha a izquierda, es decir, primero se aplica "e = 10", después "d = e", etc. O sea, a todas las variables se les asigna el mismo valor: 10.

a =b *c +d *e;

El operador * tiene mayor precedencia que + e =, por lo tanto se aplica antes, después se aplica el operador +, y por último el =. El resultado final será asignar a "a" el valor 200.

int m[10] = {10,20,30,40,50,60,70,80,90,100}, *f;
f = &m[5];
++*f;
cout << *f << endl;

La salida de este ejemplo será, 61, los operadores unarios tienen todos la misma precedencia, y se asocian de derecha a izquierda. Primero se aplica el *, y después el incremento al contenido de f.

f = &m[5];
*f--;
cout << *f << endl;

La salida de este ejemplo será, 50. Primero se aplica el decremento al puntero, y después el *.

a =b *(c +d)*e;

Ahora el operador de mayor peso es (), ya que los paréntesis están en el grupo de mayor precedencia. Todo lo que hay entre los paréntesis se evalúa antes que cualquier otra cosa. Primero se evalúa la suma, y después las multiplicaciones. El resultado será asignar a la variable "a" el valor 2000.
Este es el sistema para eludir las precedencias por defecto, si queremos evaluar antes una suma que un producto, debemos usar paréntesis.