Teoría C#: Operadores
En C#, un operador es un elemento de programa que se aplica a uno o varios operandos en una expresión o instrucción.
Los operadores que requieren un operando, como el operador de incremento (++) o new, se conocen como operadores unarios. Los operadores que requieren dos operandos, como los operadores aritméticos (+,-,*,/) se conocen como operadores binarios. Un operador, el operador condicional (?:), utiliza tres operandos y es el único operador ternario de C#.
La instrucción de C# siguiente contiene un solo operador unario y un solo operando. El operador de incremento, ++, modifica el valor del operando y.
La instrucción de C# siguiente contiene dos operadores binarios, cada uno con dos operandos.
El operador de asignación, =, tiene la variable de tipo entero y y la expresión 2 + 3 como operandos. La expresión 2 + 3 en sí se compone del operador de suma y dos operandos, 2 y 3.
La instrucción de C# siguiente contiene un solo operador unario y un solo operando. El operador de incremento, ++, modifica el valor del operando y.
C#
y++;
C#
y = 2 + 3;
Operadores, evaluación y prioridad de operadores
Un operando puede ser una expresión válida de cualquier tamaño y puede estar compuesto por una cantidad cualquiera de otras expresiones. En una expresión que contiene varios operadores, el orden de aplicación de estos viene determinado por la prioridad de operador, la asociatividad y los paréntesis.
Cada operador tiene una prioridad definida. En una expresión que contiene varios operadores con distintos niveles de prioridad, la prioridad de los operadores determina el orden en que estos se evalúan. Por ejemplo, la instrucción siguiente asigna 3 a n1.
n1 = 11 - 2 * 4;
La multiplicación se ejecuta en primer lugar porque tiene prioridad sobre la resta.
La tabla siguiente separa los operadores en categorías basadas en el tipo de operación que realizan. Las categorías se muestran en orden de prioridad.
Operadores principales
Expresión |
Descripción
|
---|---|
x.y
|
Acceso a miembros
|
f(x)
|
Invocación de método y delegado
|
a[x]
|
Acceso a matriz e indizador
|
x++
|
Incremento postfijo
|
x--
|
Decremento postfijo
|
new T(...)
|
Creación de objeto y delegado
|
new
T(...){...}
|
Creación de objetos con inicializador.
Vea Inicializadores de objeto y de colección (Guía de programación de C#). |
new
{...}
|
Inicializador de objeto anónimo.
Vea Tipos anónimos (Guía de programación de C#). |
new
T[...]
|
Creación de matrices.
Vea Matrices (Guía de programación de C#). |
typeof(T)
|
Obtener el objeto System.Type para T
|
checked(x)
|
Evaluar expresión en contexto comprobado
|
unchecked(x)
|
Evaluar expresión en contexto no comprobado
|
default (T)
|
Obtener valor predeterminado de tipo T
|
delegate {}
|
Función anónima (método anónimo)
|
Operadores unarios
Expresión |
Descripción
|
---|---|
+x
|
Identidad
|
-x
|
Negación
|
!x
|
Negación lógica
|
~x
|
Negación bit a bit
|
++x
|
Incremento prefijo
|
--x
|
Decremento prefijo
|
(T)x
|
Convertir explícitamente x al tipo T
|
Operadores de multiplicación
Expresión
|
Descripción
|
---|---|
*
|
Multiplicación
|
/
|
División
|
%
|
Resto
|
Operadores aditivos
Expresión
|
Descripción
|
---|---|
x + y
|
Suma, concatenación de cadenas, combinación de delegados
|
x - y
|
Resta, eliminación de delegados
|
Operadores de desplazamiento
Expresión
|
Descripción
|
---|---|
x << y
|
Desplazamiento a la izquierda
|
x >> y
|
Desplazamiento a la derecha
|
Operadores relacionales y de tipo
Expresión
|
Descripción
|
---|---|
x < y
|
Menor que
|
x > y
|
Mayor que
|
x <= y
|
Menor o igual que
|
x >= y
|
Mayor o igual que
|
x is T
|
Devuelve true si x es T, de lo contrario devuelve false
|
x as T
|
Devuelve x escrito como T, o null si x no es T
|
Operadores de igualdad
Expresión
|
Descripción
|
---|---|
x == y
|
Igual
|
x != y
|
No igual
|
Categoría
|
Expresión
|
Descripción
|
---|---|---|
AND lógico
|
x & y
|
AND bit a bit entero, AND lógico booleano
|
XOR lógico
|
x ^ y
|
XOR bit a bit entero, XOR lógico booleano
|
OR lógico
|
x
|
y
|
OR bit a bit entero, OR lógico booleano
|
AND condicional
|
x && y
|
Sólo evalúa y si x es true
|
OR condicional
|
x || y
|
Sólo evalúa y si x es false
|
Uso combinado de Null
|
x ?? y
|
Se evalúa como y si x es null, de lo contrario se evalúa como x
|
Condicional
|
x ?: y : z
|
Se evalúa como y si x es true, como z si x es false
|
Expresión
|
Descripción
|
---|---|
=
|
Asignación
|
x op= y
|
Asignación compuesta.
Admite estos operadores: +=, -=, *=, /=, %=, &=, |=, !=, <<=, >>= |
(T x) => y
|
Función anónima (expresión lambda)
|
Asociatividad
Cuando dos o más operadores con la misma prioridad están presentes en una expresión, se evalúan según su asociatividad. Los operadores que son asociativos por la izquierda se evalúan en orden de izquierda a derecha. Por ejemplo, x * y / z se evalúa como (x * y) / z. Los operadores que son asociativos por la derecha se evalúan en orden de derecha a izquierda. Por ejemplo, el operador de asignación es asociativo por la derecha. De lo contrario, el código siguiente produciría un error.
C#
int a, b, c; c = 1; // The following two lines are equivalent. a = b = c; a = (b = c); // The following line, which forces left associativity, causes an error. //(a = b) = c;
Los operadores de asignación y el operador ternario (?:) son asociativos por la derecha. Todos los demás operadores binarios son asociativos por la izquierda.
Independientemente de que los operadores de una expresión sean asociativos por la izquierda o por la derecha, los operandos de cada expresión se evalúan primero, de izquierda a derecha. Los siguientes ejemplos muestran el orden de evaluación de los operadores y los operandos.
Instrucción | Orden de evaluación |
---|---|
a = b | a, b, = |
a = b + c | a, b, c, +, = |
a = b + c * d | a, b, c, d, *, +, = |
a = b * c + d | a, b, c, *, d, +, = |
a = b - c + d | a, b, c, -, d, +, = |
a += b -= c | a, b, c, -=, += |
Se agregan paréntesis
Puede cambiar el orden impuesto por la prioridad de los operadores y la asociatividad mediante el uso de paréntesis. Por ejemplo, 2 + 3 * 2 se evalúa como 8, porque los operadores de multiplicación tienen prioridad sobre los operadores de adición. Sin embargo, si escribe la expresión como (2 + 3) * 2, la adición se evalúa antes de la multiplicación, y el resultado es 10. Los siguientes ejemplos muestran el orden de evaluación en las expresiones entre paréntesis. Como en ejemplos anteriores, se evalúan los operandos antes de aplicar el operador.
Instrucción
|
Orden de evaluación
|
---|---|
a = (b + c) * d
|
a, b, c, +, d, *, =
|
a = b - (c + d)
|
a, b, c, d, +, -, =
|
a = (b + c) * (d - e)
| a, b, c, +, d, e, -, *, = |
Comentarios
Publicar un comentario