- Los
operadores aritméticos funcionan igual que en C y C++.
- El
resultado de los operadores relacionales y lógicos es un valor de
tipo bool.
- Los
operadores de cortocircuito evalúan el segundo operando solo cuando es
necesario.
- Los
operadores a nivel de bits no se pueden aplicar a tipos bool, float, double o decimal.
operadores de C#
Las operaciones
en tipos enteros (como ==, !=, <, >, &, | )
se suelen permitir en tipos de enumeración (enum).
En las secciones se enumeran los operadores de C# desde la precedencia
más alta a la más baja. Los operadores de cada sección comparten el mismo
nivel de precedencia.
Estos son los operadores de precedencia más alta. Tenga en cuenta
que puede hacer clic en los operadores para ir a las páginas de detalles con
ejemplos.
x.y: acceso a miembros.
x?.y: acceso a miembros condicional
null. Devuelve null si el operando izquierdo es null.
f(x): invocación de función.
a[x]: indización de objeto agregado.
a?[x]: indización condicional
null. Devuelve null si el operando izquierdo es null.
x++: incremento de postfijo. Devuelve el
valor de x y, a continuación, actualiza la ubicación de almacenamiento con el
valor de x que es uno mayor (normalmente agrega el entero 1).
x--: decremento de postfijo. Devuelve el
valor de x; a continuación, actualiza la ubicación de almacenamiento con el
valor de x que es uno menos (normalmente resta el entero 1).
New: creación de instancias de tipo.
Typeof: devuelve el objeto System.Type que
representa el operando.
Checked: habilita la comprobación de
desbordamiento para operaciones con enteros.
Unchecked: deshabilita la comprobación de
desbordamiento para operaciones con enteros. Este es el comportamiento
predeterminado del compilador.
default(T): devuelve el valor inicializado
predeterminado de tipo T, null para tipos de referencia, cero para tipos
numéricos y cero o null en miembros para tipos de struct.
Delegate: declara y devuelve una instancia de
delegado.
Sizeof: devuelve el tamaño en bytes del
operando de tipo.
->: desreferenciación del puntero combinada
con acceso a miembros.
Estos operadores tienen mayor precedencia que los de la sección
siguiente y menor que los de la anterior. Tenga en cuenta que puede hacer
clic en los operadores para ir a las páginas de detalles con ejemplos.
+x: devuelve el valor de x.
-x: negación numérica.
!x: negación lógica.
~x: complemento bit a bit.
++x: incremento de prefijo. Devuelve el
valor de x después de actualizar la ubicación de almacenamiento con el valor de
x que es uno mayor (normalmente agrega el entero 1).
--x: decremento de prefijo. Devuelve el
valor de x después de actualizar la ubicación de almacenamiento con el valor de
x que es uno menos (normalmente resta el entero 1).
(T)x: conversión de tipos.
&x: dirección de.
*x: desreferenciación.
Estos operadores tienen mayor precedencia que los de la sección
siguiente y menor que los de la anterior. Tenga en cuenta que puede hacer
clic en los operadores para ir a las páginas de detalles con ejemplos.
x * y: multiplicación.
x / y: división. Si los operandos son
enteros, el resultado es un entero que se trunca hacia cero (por ejemplo, -7 / 2 is -3).
x % y: módulo. Si los operandos son
enteros, devuelve el resto de dividir x entre y. Si q = x / y y r = x % y, entonces x = q * y + r.
Estos operadores tienen mayor precedencia que los de la sección
siguiente y menor que los de la anterior. Tenga en cuenta que puede hacer
clic en los operadores para ir a las páginas de detalles con ejemplos.
x + y: suma.
x – y: resta.
Estos operadores tienen mayor precedencia que los de la sección
siguiente y menor que los de la anterior. Tenga en cuenta que puede hacer
clic en los operadores para ir a las páginas de detalles con ejemplos.
x << y: desplaza los bits a la izquierda
y rellena con cero a la derecha.
x >> y: desplaza los bits a la
derecha. Si el operando izquierdo es int o long,
los bits de la izquierda se rellenan con el bit de signo. Si el operando
izquierdo es uint o ulong, los bits de la
izquierda se rellenan con cero.
Estos operadores tienen mayor precedencia que los de la sección
siguiente y menor que los de la anterior. Tenga en cuenta que puede hacer
clic en los operadores para ir a las páginas de detalles con ejemplos.
x < y: menor que (true si x es menor que
y).
x > y: mayor que (true si x es mayor que
y).
x <= y: menor o igual que.
x >= y: menor o igual que.
Is: compatibilidad de tipos. Devuelve
true si el operando izquierdo evaluado se puede convertir al tipo especificado
en el operando derecho (un tipo estático).
As: conversión de tipos. Devuelve el
operando izquierdo convertido al tipo especificado por el operando derecho (un
tipo estático), pero as devuelve null donde (T)x produciría una excepción.
Estos operadores tienen mayor precedencia que los de la sección
siguiente y menor que los de la anterior. Tenga en cuenta que puede hacer
clic en los operadores para ir a las páginas de detalles con ejemplos.
x == y: igualdad. De forma
predeterminada, para los tipos de referencia distintos de string,
devuelve igualdad de referencia (prueba de identidad). Sin embargo, los
tipos pueden sobrecargar ==, por lo que si su intención es probar la
identidad, es mejor usar el método ReferenceEquals en object.
x != y: distinto de. Vea el comentario
de ==. Si un tipo sobrecarga ==, debe
sobrecargar !=.
Este operador tiene mayor precedencia que el de la sección siguiente y
menor que los de la anterior. Tenga en cuenta que puede hacer clic en el
operador para ir a la página de detalles con ejemplos.
x & y: AND lógico o bit a bit. El uso
con tipos enteros y tipos enum suele estar permitido.
Este operador tiene mayor precedencia que el de la sección siguiente y
menor que el de la anterior. Tenga en cuenta que puede hacer clic en el
operador para ir a la página de detalles con ejemplos.
x ^ y: XOR lógico o bit a bit. Por lo
general puede usarlo con tipos enteros y tipos enum.
Este operador tiene mayor precedencia que el de la sección siguiente y
menor que el de la anterior. Tenga en cuenta que puede hacer clic en el
operador para ir a la página de detalles con ejemplos.
x | y: OR lógico o bit a bit. El uso con
tipos enteros y tipos enum suele estar permitido.
Este operador tiene mayor precedencia que el de la sección siguiente y
menor que el de la anterior. Tenga en cuenta que puede hacer clic en el
operador para ir a la página de detalles con ejemplos.
x && y: AND lógico. Si el primer
operando es false, C# no evalúa el segundo operando.
Este operador tiene mayor precedencia que el de la sección siguiente y
menor que el de la anterior. Tenga en cuenta que puede hacer clic en el
operador para ir a la página de detalles con ejemplos.
x || y: OR lógico. Si el primer operando
es true, C# no evalúa el segundo operando.
Este operador tiene mayor precedencia que el de la sección siguiente y
menor que el de la anterior. Tenga en cuenta que puede hacer clic en el
operador para ir a la página de detalles con ejemplos.
Este operador tiene mayor precedencia que el de la sección siguiente y
menor que el de la anterior. Tenga en cuenta que puede hacer clic en el
operador para ir a la página de detalles con ejemplos.
Estos operadores tienen mayor precedencia que los de la sección
siguiente y menor que el de la anterior. Tenga en cuenta que puede hacer
clic en los operadores para ir a las páginas de detalles con ejemplos.
x = y: asignación.
x += y: incremento. Agregue el valor
de y al valor
de x, almacene el
resultado en x y devuelva el nuevo valor. Si xdesigna un event, y debe ser una función adecuada
que C# agregue como un controlador de eventos.
x -= y: decremento. Reste el valor
de y del valor
de x, almacene el
resultado en x y devuelva el nuevo valor. Si xdesigna un event, y debe ser una función adecuada
que C# quite como un controlador de eventos.
x *= y: asignación y
multiplicación. Multiplique el valor de y por el valor de x, almacene el resultado en x y devuelva el nuevo valor.
x /= y: asignación y división. Divida el
valor de x por el valor de y, almacene el resultado en x y devuelva el nuevo valor.
x %= y: asignación y módulo. Divida el
valor de x por el valor de y, almacene el resto en x y devuelva el nuevo valor.
x &= y: asignación y AND. AND el
valor de y con el valor de x, almacene el resultado en x y devuelva el nuevo valor.
x |= y: asignación y OR. OR el valor
de y con el valor
de x, almacene el
resultado en x y devuelva el nuevo valor.
x ^= y: asignación y XOR. XOR el valor
de y con el valor
de x, almacene el
resultado en x y devuelva el nuevo valor.
x <<= y: asignación y desplazamiento a
la izquierda. Desplace el valor de x a la izquierda y lugares, almacene el resultado
en x y devuelva el
nuevo valor.
x >>= y: asignación y desplazamiento a
la derecha. Desplace el valor de x a la derecha y posiciones, almacene el
resultado en x y devuelva el nuevo valor.
=>: declaración lambda.
Los operadores aritméticos (+, -, *, /) pueden producir resultados fuera del rango
de valores posibles para el tipo numérico implicado. Para obtener detalles
debe ir a la sección del operador en cuestión, pero en general:
- El
desbordamiento aritmético de enteros produce una OverflowException o descarta los
bits más significativos del resultado. La división de enteros por
cero siempre produce una DivideByZeroException.
- El
desbordamiento aritmético de punto flotante o la división por cero nunca
producen una excepción, porque los tipos de punto flotante se basan en el
estándar IEEE 754 y por tanto tienen disposiciones para representar el
infinito y NaN (No es un número).
- El
desbordamiento aritmético decimal siempre produce una OverflowException. La división
decimal por cero siempre produce una DivideByZeroException.
Cuando se produce el desbordamiento de enteros, lo que suceda dependerá
del contexto de ejecución, que puede ser comprobado o no comprobado. En un
contexto comprobado, se produce una OverflowException. En un contexto no comprobado, se descartan los bits
más significativos del resultado y la ejecución continúa. Por lo
tanto, C# ofrece la posibilidad de controlar u omitir el desbordamiento.
Además de los operadores aritméticos, las conversiones de tipo entero a
tipo entero también pueden provocar un desbordamiento (por ejemplo, la conversión
de un long a un int) y están sujetas a ejecución comprobada o
no comprobada. Sin embargo, los operadores bit a bit y los de
desplazamiento nunca producen desbordamiento.
No comments:
Post a Comment