Asociatividad y precedencia de operadores de C#
Asociación y precedencia de operadores de C#
En este tutorial, aprenderá sobre la precedencia de operadores y la asociatividad en C#. Esto nos dará una idea de cómo el compilador de C# evalúa una expresión.
Precedencia de operadores de C#
La precedencia de operadores 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 de la multiplicación (*)
el operador es mayor que la precedencia de la suma (+)
operador. Por lo tanto, la operación de multiplicación se realiza antes de la suma.
Eche un vistazo a la siguiente declaración.
int x = 4 + 3 * 5;
¿Cuál será el valor de x después de ejecutar esta instrucción?
El operando 3
está asociado con +
y *
. Como se indicó anteriormente, la multiplicación tiene una precedencia más alta que la suma. Entonces, la operación 3 * 5
se lleva a cabo en lugar de 4 + 3
. El valor de la variable x será 19
.
Si la adición tuviera una precedencia más alta, 4 + 3
se evaluaría primero y el valor de x seria 35
.
Tabla de precedencia de operadores
Cuanto mayor sea la precedencia del operador, más alto aparecerá en la tabla
Categoría | Operadores |
---|---|
Incremento y decremento de sufijo | ++, -- |
Prefijo Incremento, Decremento y Unario | ++, --, +, -, !, ~ |
Multiplicativo | *, /, % |
Aditivo | +, - |
Cambio | <<,>> |
Relacional | <, <=,>,>= |
Igualdad | ==, != |
Bitbit Y | & |
XOR bit a bit | ^ |
Bitbit O | | |
Y lógico | && |
O lógico | || |
Ternario | ? : |
Tarea | =, +=, -=, *=, /=, %=, &=, |=, ^=, <<=,>>= |
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 de operadores
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 False
Entendamos cómo se evalúa la expresión en el programa.
La precedencia de --
y ++
es superior a *
y precedencia de *
es superior a -
. De ahí la declaración,
result1 = --a * b - ++c;
es equivalente a
result1 = ((--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
.
- De ahí el valor final de resultado1 será
19
.
En la siguiente expresión, la precedencia de +
es superior a >=
. Entonces, c y a se suma primero y la suma se compara con b para producir false
.
Asociación de Operadores en C#
En la sección anterior, discutimos sobre la precedencia de operadores. Si se utilizan dos operadores con diferente precedencia, el operador con mayor precedencia se evalúa primero.
Pero, ¿y si ambos operadores tienen la misma precedencia?
En tal caso, la expresión se evalúa en función de la asociatividad del operador (de izquierda a derecha o de derecha a izquierda).
Por ejemplo:
int a = 5, b = 6, c = 3; int result = a * b / c;
Aquí, ambos *
y /
tienen la misma precedencia. Pero como la asociatividad de estos operadores es de izquierda a derecha , a * b
primero se evalúa y luego se realiza la división. El resultado final de esta expresión será 10
.
En este ejemplo particular, la asociatividad realmente no importa. Porque incluso si la división se hiciera antes que 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 de =
el operador es de derecha a izquierda . Entonces el valor de c (es decir, 3
) está asignado a b , y luego el valor de b está asignado a a . Entonces, después de ejecutar esta declaración, los valores de a , b y c será 3
.
La siguiente tabla muestra la asociatividad de los operadores de 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 |
Bitbit Y | & | De izquierda a derecha |
XOR bit a bit | ^ | De izquierda a derecha |
Bitbit O | | | De izquierda a derecha |
Y lógico | && | De izquierda a derecha |
O lógico | || | De izquierda a derecha |
Ternario | ? : | De derecha a izquierda |
Tarea | =, +=, -=, *=, /=, %=, &=, |=, ^=, <<=,>>= | 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
Lenguaje C
- Identificadores y palabras clave de C#
- Operadores de C#
- C# ternario (? :) Operador
- Clase y objeto de C#
- Clase y método abstractos de C#
- C# Clase parcial y método parcial
- Clase y método sellados de C#
- Operadores en C++ con Ejemplo:Qué es, Tipos y Programas
- C - Constantes y Literales
- C - Entrada y Salida
- C++ Fecha y hora