Precedencia y asociatividad de operadores en C #: definición y ejemplos

En este tutorial, aprenderá sobre la precedencia y la asociatividad de los operadores en C #. Esto nos dará una idea de cómo el compilador de C # evalúa una expresión.

Prioridad del operador C #

La precedencia del operador es un conjunto de reglas que define cómo se evalúa una expresión. En C #, cada operador de C # tiene una prioridad asignada y, en función de estas prioridades, se evalúa la expresión.

Por ejemplo , la precedencia del (*)operador de multiplicación es mayor que la precedencia del (+)operador de suma . Por tanto, la operación que implica la multiplicación se realiza antes que la suma.

Eche un vistazo a la declaración a continuación.

 int x = 4 + 3 * 5;

¿Cuál será el valor de x después de ejecutar esta declaración?

El operando 3está asociado con +y *. Como se dijo anteriormente, la multiplicación tiene mayor precedencia que la suma. Entonces, la operación 3 * 5se realiza en lugar de 4 + 3. El valor de la variable x será 19.

Si la suma tuviera una precedencia mayor, 4 + 3se evaluaría primero y el valor de x sería 35.

Tabla de precedencia de operadores

Cuanto mayor sea la precedencia del operador, más alto aparecerá en la tabla

Precedencia del operador C #
Categoría Operadores
Incremento y decremento de sufijo ++, -
Prefijo Incremento, Decremento y Unario ++, -, +, -,!, ~
Multiplicativo *, /,%
Aditivo +, -
Cambio <>
Relacional <,,> =
Igualdad ==,! =
Y bit a bit Y
XOR bit a bit ^
O bit a bit |
Y lógico &&
OR lógico ||
Ternario ? :
Asignación =, + =, - =, * =, / =,% =, & =, | =, =, <> =

Los operadores de asignación tienen la precedencia más baja mientras que los operadores de incremento y decremento de sufijo tienen la precedencia más alta.

Ejemplo 1: precedencia del operador

 using System; namespace Operator ( 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); ) ) ) 

Cuando ejecutamos el programa, la salida será:

 19 falso

Entendamos cómo se evalúa la expresión en el programa.

La precedencia de --y ++es mayor que *, y la precedencia de *es mayor que -. De ahí la declaración,

 resultado1 = --a * b - ++ c;

es equivalente a

 resultado1 = ((--a) * b) - (++ c);

La expresión entre paréntesis siempre se evalúa primero, sin importar la precedencia de los operadores fuera de ella.

  • Al principio, (--a) se evalúa dando como resultado 4.
  • Entonces (++ c) se evalúa dando como resultado 5.
  • Ahora, (a * b) se evalúa dando como resultado 24.
  • Finalmente, se realiza la resta dando como resultado 19.
  • Por tanto, el valor final de result1 será 19.

En la siguiente expresión, la precedencia de +es mayor que >=. Entonces, primero se suman cy a y la suma se compara con b para producir false.

Asociatividad de operadores en C #

En la sección anterior, discutimos sobre la precedencia de los operadores. Si se utilizan dos operadores con diferente precedencia, primero se evalúa el operador con mayor precedencia.

Pero, ¿y si ambos operadores tienen la misma precedencia?

En tal caso, la expresión se evalúa basándose en la asociatividad del operador (de izquierda a derecha o de derecha a izquierda).

Por ejemplo:

int a = 5, b = 6, c = 3; int resultado = a * b / c;

Aquí, ambos *y /tienen la misma precedencia. Pero como la asociatividad de estos operadores es de izquierda a derecha , a * bprimero se evalúa y luego se realiza la división. El resultado final de esta expresión será 10.

En este ejemplo en particular, la asociatividad realmente no importa. Porque incluso si la división se realizara antes de la multiplicación, el resultado no se vería afectado.

Echemos un vistazo a otro ejemplo.

int a = 5, b = 6, c = 3; a = b = c;

La asociatividad del =operador es de derecha a izquierda . Entonces, el valor de c (es decir 3) se asigna a b, y luego el valor de b se asigna a a. Entonces, después de ejecutar esta declaración, los valores de a, byc serán 3.

La siguiente tabla muestra la asociatividad de los operadores de C #:

Asociatividad de operadores en C #
Categoría Operadores Asociatividad
Incremento y decremento de sufijo ++, - De izquierda a derecha
Prefijo Incremento, Decremento y Unario ++, -, +, -,!, ~ De derecha a izquierda
Multiplicativo *, /,% De izquierda a derecha
Aditivo +, - De izquierda a derecha
Cambio <> De izquierda a derecha
Relacional <,,> = De izquierda a derecha
Igualdad ==,! = De izquierda a derecha
Y bit a bit Y De izquierda a derecha
XOR bit a bit ^ De izquierda a derecha
O bit a bit | De izquierda a derecha
Y lógico && De izquierda a derecha
OR lógico || De izquierda a derecha
Ternario ? : De derecha a izquierda
Asignación =, + =, - =, * =, / =,% =, & =, | =, =, <> = De derecha a izquierda

Casi todos los operadores tienen asociatividad de izquierda a derecha. Los operadores que tienen asociatividad de derecha a izquierda son:

  • Operadores unarios
  • Operadores de incremento y decremento de prefijo
  • Operador ternario
  • Operadores de Asignación

Ejemplo 2: asociatividad de operadores

 using System; namespace Operator ( class OperatorPrecedence ( 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 = (0), b = (1), c = (2)", a, b, c); ) ) ) 

Cuando ejecutamos el programa, la salida será:

 10 a = 3, b = 3, c = 3

Articulos interesantes...