En C++, la precedencia de operadores determina el orden en que los operadores se evalúan en una expresión compleja. Entender esto es importante para escribir (y por tanto interpretar) correctamente las expresiones y evitarnos errores inesperados.
Los operadores con mayor precedencia se evalúan antes que los operadores con menor precedencia. Si dos operadores tienen la misma precedencia, su evaluación se determina por la asociatividad del operador *(izquierda a derecha o derecha a izquierda).
Si quieres aprender más sobre Precedencia de operadores
consulta el Curso de Introducción a la Programación leer más
Tabla de precedencia de operadores
Aquí tenéis una tabla con la precedencia de los operadores en C++, desde la mayor hasta la menor. La precedencia más alta se evalúa primero:
Prioridad | Operador | Descripción | Asociatividad |
---|---|---|---|
1 | () | Paréntesis | N/A |
2 | ++ , -- | Incremento y decremento (postfijo) | Derecha a izquierda |
3 | + , - | Unario positivo y negativo | Derecha a izquierda |
4 | * , / , % | Multiplicación, división, módulo | Izquierda a derecha |
5 | + , - | Adición, sustracción | Izquierda a derecha |
6 | << , >> | Desplazamiento de bits | Izquierda a derecha |
7 | < , > , <= , >= | Comparación | Izquierda a derecha |
8 | == , != | Igualdad, desigualdad | Izquierda a derecha |
9 | & | AND bit a bit | Izquierda a derecha |
10 | ^ | XOR bit a bit | Izquierda a derecha |
11 | ` | ` | OR bit a bit |
12 | && | AND lógico | Izquierda a derecha |
13 | ` | ` | |
14 | ?: | Operador condicional (ternario) | Derecha a izquierda |
15 | = , += , -= | Asignación y operadores compuestos | Derecha a izquierda |
Cómo funciona la precedencia de operadores
Evaluación de expresiones
La precedencia de operadores determina el orden en que se evalúan los operadores en una expresión. Por ejemplo, considera la siguiente expresión:
int resultado = 3 + 4 * 2; // equivale a 3 + (4 * 2) = 11
Aquí, el operador de multiplicación (*
) tiene una precedencia mayor que el operador de adición (+
). Por lo tanto, 4 * 2
se evalúa primero, resultando en 8
, y luego se suma 3
, dando como resultado 11
.
Uso de paréntesis
Para cambiar el orden de evaluación, puedes usar paréntesis. Los paréntesis tienen la mayor precedencia y fuerzan la evaluación de la expresión que contienen primero:
int resultado = (3 + 4) * 2;
En este caso, 3 + 4
se evalúa primero debido a los paréntesis, resultando en 7
, y luego se multiplica por 2
, dando como resultado 14
.
Asociatividad
Cuando los operadores tienen la misma precedencia, se aplica la asociatividad para determinar el orden de evaluación. La mayoría de los operadores en C++ tienen una asociatividad de izquierda a derecha.
int a = 1;
int b = 2;
int c = 3;
int resultado = a + b - c; // Evaluado como ((a + b) - c)
Aquí, tanto +
como -
tienen la misma precedencia y asociatividad de izquierda a derecha, por lo que a + b
se evalúa primero y luego se resta c
.
Sin embargo, algunos operadores, como los de asignación y el operador condicional ternario, tienen una asociatividad de derecha a izquierda.
Ejemplo complejo
Consideremos la siguiente expresión:
int resultado = 5 + 2 * 3 - 4 / 2 + (1 + 3);
Vamos a evaluarla paso a paso según la precedencia y asociatividad:
- Evaluamos la expresión en paréntesis:
(1 + 3)
, que resulta en4
. - Evaluamos la multiplicación:
2 * 3
, que resulta en6
. - Evaluamos la división:
4 / 2
, que resulta en2
. - Evaluamos las operaciones restantes de izquierda a derecha:
5 + 6
resulta en11
.11 - 2
resulta en9
.9 + 4
resulta en13
.
Por lo tanto, el resultado final de la expresión es 13
.
Buenas prácticas Consejos
Aunque la precedencia de operadores permite omitir paréntesis en muchas situaciones, es una buena práctica usar paréntesis para mejorar la claridad del código. Esto no solo hace que el código sea más fácil de entender, sino que también reduce la probabilidad de errores.
int resultado = (5 + 2) * (3 - 1);