Operadores (C# y Java)

Actualización: noviembre 2007

C# ofrece todos los operadores compatibles con Java aplicables, como se muestra en la tabla siguiente. Al final de la tabla, verá algunos operadores nuevos disponibles en C#, pero no en Java:

Categoría

Símbolo

Unario

++--+-!~()

Multiplicativo

*/%

Sumatorio

+ -

Desplazamiento

<< >>

Relacionales

< > <= >= instanceof

Igualdad

== !=

AND lógico

&

XOR lógico

^

OR lógico

|

AND condicional

&&

OR condicional

||

Condicional

? :

Asignación

= *= /= %= += -= <<= >>= &= ^= |=

Tipo de operando

typeof

Tamaño del operando

sizeof

Exigir comprobación de desbordamiento

checked

Suprimir comprobación de desbordamiento

unchecked

El único operador de Java no disponible en C# es el operador de desplazamiento (>>>). Este operador está presente en Java debido a la ausencia de variables sin signo en ese lenguaje, para los casos en que se requiere el desplazamiento a la derecha para insertar un uno (1) en los bits más significativos.

C# admite variables sin signo y, por consiguiente, sólo necesita el operador >> estándar. Este operador genera resultados diferentes, lo que depende de si el operando está con o sin signo. Desplazar a la derecha un número sin signo inserta un 0 en el bit más significativo, mientras que desplazar a la derecha un número con signo copia el bit más significativo anterior.

Operadores Checked y Unchecked

Las operaciones aritméticas producirán desbordamiento si el resultado es demasiado grande para el número de bits asignados al tipo de datos en uso. Ese desbordamiento se puede comprobar u omitir en una operación aritmética integral dada con las palabras clave checked y unchecked. Si se trata de una expresión constante que utiliza checked, se genera un error en tiempo de compilación.

El siguiente es un ejemplo simple que muestra el uso de estos operadores:

class TestCheckedAndUnchecked
{
    static void Main()
    {
        short a = 10000;
        short b = 10000;

        short c = (short)(a * b);                     // unchecked by default
        short d = unchecked((short)(10000 * 10000));  // unchecked
        short e = checked((short)(a * b));            // checked - run-time error

        System.Console.WriteLine(10000 * 10000);  // 100000000
        System.Console.WriteLine(c);              // -7936
        System.Console.WriteLine(d);              // -7936
        System.Console.WriteLine(e);              // no result
    }    
}

En este código, el operador unchecked evita el error en tiempo de compilación que, de lo contrario, se produciría por la instrucción siguiente:

short d = unchecked((short)(10000 * 10000));  // unchecked

La siguiente expresión utiliza el operador unchecked de manera predeterminada, por lo que el valor produce un desbordamiento pero no lo comunica:

short c = (short)(a * b);                     // unchecked by default

Con el operador checked, se puede exigir que se compruebe el desbordamiento de la expresión en tiempo de ejecución:

short e = checked((short)(a * b));            // checked - run-time error

Al asignar los primeros dos valores a d y c se produce un desbordamiento, que no se comunica, con un valor de -7936 cuando se ejecuta el programa, pero al intentar multiplicar el valor por e con checked(), el programa producirá una excepción OverflowException.

Nota:

También puede controlar si desea comprobar el desbordamiento aritmético en un bloque de código con el modificador de compiladores de línea de comandos (/checked) o directamente en Visual Studio por cada proyecto.

Vea también

Conceptos

Guía de programación de C#

Referencia

Operadores de C#

Otros recursos

Lenguaje de programación C# para desarrolladores de Java