cpp-precedencia-operadores

Precedencia de operadores en C++

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

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:

PrioridadOperadorDescripciónAsociatividad
1()ParéntesisN/A
2++, --Incremento y decremento (postfijo)Derecha a izquierda
3+, -Unario positivo y negativoDerecha a izquierda
4*, /, %Multiplicación, división, móduloIzquierda a derecha
5+, -Adición, sustracciónIzquierda a derecha
6<<, >>Desplazamiento de bitsIzquierda a derecha
7<, >, <=, >=ComparaciónIzquierda a derecha
8==, !=Igualdad, desigualdadIzquierda a derecha
9&AND bit a bitIzquierda a derecha
10^XOR bit a bitIzquierda a derecha
11``OR bit a bit
12&&AND lógicoIzquierda a derecha
13``
14?:Operador condicional (ternario)Derecha a izquierda
15=, +=, -=Asignación y operadores compuestosDerecha 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:

  1. Evaluamos la expresión en paréntesis: (1 + 3), que resulta en 4.
  2. Evaluamos la multiplicación: 2 * 3, que resulta en 6.
  3. Evaluamos la división: 4 / 2, que resulta en 2.
  4. Evaluamos las operaciones restantes de izquierda a derecha:
    • 5 + 6 resulta en 11.
    • 11 - 2 resulta en 9.
    • 9 + 4 resulta en 13.

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);