Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> Lenguaje C

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

Precedencia de operadores de C#
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.

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#:

C# Asociatividad de operadores
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:


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

  1. Identificadores y palabras clave de C#
  2. Operadores de C#
  3. C# ternario (? :) Operador
  4. Clase y objeto de C#
  5. Clase y método abstractos de C#
  6. C# Clase parcial y método parcial
  7. Clase y método sellados de C#
  8. Operadores en C++ con Ejemplo:Qué es, Tipos y Programas
  9. C - Constantes y Literales
  10. C - Entrada y Salida
  11. C++ Fecha y hora