Dominando la precedencia y asociatividad de operadores en C#: Guía práctica
Dominando la precedencia y asociatividad de operadores en C#
Este tutorial en profundidad explica cómo el compilador de C# evalúa las expresiones aplicando las reglas de precedencia y asociatividad de operadores. Aprende con ejemplos claros y tablas de referencia.
Precedencia de operadores en C#
La precedencia de operadores define el orden en que se evalúan las partes de una expresión. Cada operador de C# tiene un nivel de prioridad fijo, lo que garantiza que el compilador procese las expresiones de forma consistente.
Por ejemplo, el operador de multiplicación * tiene mayor precedencia que la adición +. Por tanto, en la expresión:
int x = 4 + 3 * 5;
la multiplicación se realiza primero, dando como resultado x = 19.
Si la adición tuviera prioridad sobre la multiplicación, el resultado sería 35, pero C# sigue la jerarquía de precedencia establecida.
Tabla de precedencia de operadores
La siguiente tabla lista los operadores de mayor a menor precedencia.
| Categoría | Operadores |
|---|---|
| Incremento y decremento postfijo | |
| Incremento, decremento y unarios prefijos | ++, --, +, -, !, ~ |
| Multiplicativos | *, /, % |
| Aditivos | +, - |
| Desplazamiento | <<, >> |
| Relacionales | <, <=, >, >= |
| Igualdad | ==, != |
| AND bit a bit | & |
| XOR bit a bit | ^ |
| OR bit a bit | | |
| AND lógico | && |
| OR lógico | || |
| Ternario | ? : |
| Asignación | =, +=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>= |
Las asignaciones tienen la prioridad más baja, mientras que los incrementos/decrementos postfijos están en la cima.
Ejemplo 1: Precedencia de operadores
using System;
namespace OperatorDemo {
class OperatorPrecedence {
public static void Main(string[] args) {
int result1;
int a = 5, b = 6, c = 4;
result1 = --a * b - ++c;
Console.WriteLine(result1);
bool result2;
result2 = b >= c + a;
Console.WriteLine(result2);
}
}
}
La ejecución de este programa imprime:
19 False
Pasos de evaluación:
(--a)→ 4 (a pasa a ser 4)(++c)→ 5 (c pasa a ser 5)(a * b)→ 24- Resta: 24 - 5 = 19
La segunda expresión muestra que la adición + tiene mayor precedencia que la comparación >=, por lo que c + a se evalúa antes de la comparación.
Asociatividad de operadores en C#
Cuando dos operadores comparten la misma precedencia, el compilador usa la asociatividad para decidir el orden de evaluación. La mayoría de los operadores de C# son de izquierda a derecha, pero algunos son de derecha a izquierda.
Ejemplo:
int a = 5, b = 6, c = 3;
int result = a * b / c;
Como * y / son de izquierda a derecha, la multiplicación se realiza primero, dando 10.
La asociatividad de derecha a izquierda es crucial en cadenas de asignación:
int a = 5, b = 6, c = 3;
a = b = c;
El valor 3 se asigna a b, luego b a a, resultando en que todas las variables contienen 3.
La tabla siguiente resume la asociatividad de operadores en C#.
| Categoría | Operadores | Asociatividad |
|---|---|---|
| Incremento y decremento postfijo | ++, -- | Izquierda a derecha |
| Incremento, decremento y unarios prefijos | ++, --, +, -, !, ~ | Derecha a izquierda |
| Multiplicativos | *, /, % | Izquierda a derecha |
| Aditivos | +, - | Izquierda a derecha |
| Desplazamiento | <<, >> | Izquierda a derecha |
| Relacionales | <, <=, >, >= | Izquierda a derecha |
| Igualdad | ==, != | Izquierda a derecha |
| AND bit a bit | & | Izquierda a derecha |
| XOR bit a bit | ^ | Izquierda a derecha |
| OR bit a bit | | | Izquierda a derecha |
| AND lógico | && | Izquierda a derecha |
| OR lógico | || | Izquierda a derecha |
| Ternario | ? : | Derecha a izquierda |
| Asignación | =, +=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>= | Derecha a izquierda |
Los operadores clave de derecha a izquierda incluyen los prefijos unarios, el operador ternario y todas las asignaciones.
Ejemplo 2: Asociatividad en acción
using System;
namespace OperatorDemo {
class OperatorAssociativity {
public static void Main(string[] args) {
int a = 5, b = 6, c = 3;
int result = a * b / c;
Console.WriteLine(result);
a = b = c;
Console.WriteLine($"a = {a}, b = {b}, c = {c}");
}
}
}
La salida es:
10 a = 3, b = 3, c = 3
Lenguaje C
- Entendiendo palabras clave e identificadores en C#: Reglas, listas y mejores prácticas
- Operadores en C# – Guía completa de operadores en C#
- Operador ternario en C#: Guía concisa para expresiones condicionales
- Clases y objetos en C#: Fundamentos para POO robusta
- Dominando clases y métodos abstractos en C#: Guía práctica
- Entendiendo clases y métodos parciales en C#
- Dominando clases y métodos sealed en C#: Cuándo usarlos, ejemplos claros y mejora de seguridad y rendimiento
- Operadores en C++ explicados: Tipos, ejemplos y programas de muestra
- Entendiendo constantes y literales en C: Tipos, uso y mejores prácticas
- Dominando Entrada y Salida en programación C
- Guía Completa de Fecha y Hora en C++