Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Aggiornamento: novembre 2007
In C# sono disponibili tutti gli operatori applicabili supportati da Java, come indicato nella tabella riportata di seguito. Alla fine della tabella sono inclusi alcuni nuovi operatori disponibili in C#, ma non in Java:
Categoria |
Simbolo |
|---|---|
Unario |
++--+-!~() |
Moltiplicazione |
*/% |
Addizione |
+ - |
Spostamento |
<< >> |
Relazionali |
< > <= >= instanceof |
Uguaglianza |
== != |
AND logico |
& |
XOR logico |
^ |
OR logico |
| |
AND condizionale |
&& |
OR condizionale |
|| |
Condizionale |
? : |
Assegnazione |
= *= /= %= += -= <<= >>= &= ^= |= |
Tipo di operando |
typeof |
Dimensione dell'operando |
sizeof |
Attivazione del controllo dell'overflow |
checked |
Disattivazione del controllo dell'overflow |
unchecked |
L'unico operatore Java non disponibile in C# è l'operatore shift (>>>). Questo operatore è disponibile in Java perché in tale linguaggio non sono presenti variabili unsigned, per i casi in cui è necessario uno spostamento a destra per inserire un 1 nei bit più significativi.
Poiché C# supporta le variabili unsigned, è sufficiente l'operatore >> standard. Questo operatore produce risultati diversi a seconda che l'operando sia signed o unsigned. Effettuando lo spostamento a destra di un numero unsigned, viene inserito 0 nel bit più significativo, mentre con lo spostamento a destra di un numero signed viene copiato il precedente bit più significativo.
Operatori checked e unchecked
Le operazioni aritmetiche determinano un overflow se il risultato è troppo esteso per il numero di bit allocati al tipo di dati in uso. È possibile verificare o ignorare tale overflow per una determinata operazione aritmetica integrale con le parole chiave checked e unchecked. Nel caso di un'espressione costante che utilizza checked, viene generato un errore in fase di compilazione.
Nel semplice esempio riportato di seguito vengono illustrati questi operatori:
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
}
}
In questo codice l'operatore unchecked consente di evitare l'errore in fase di compilazione che, altrimenti, verrebbe causato dall'istruzione riportata di seguito:
short d = unchecked((short)(10000 * 10000)); // unchecked
L'espressione che segue è unchecked per impostazione predefinita, pertanto il valore va in overflow in modo invisibile:
short c = (short)(a * b); // unchecked by default
Con l'operatore checked è possibile imporre la verifica dell'espressione per individuare eventuali overflow in fase di esecuzione:
short e = checked((short)(a * b)); // checked - run-time error
L'assegnazione dei primi due valori a d e c comporta un overflow invisibile con un valore pari a -7936 quando viene eseguito il programma, ma se si tenta di moltiplicare il valore per e utilizzando checked(), il programma genererà un'eccezione OverflowException.
Nota: |
|---|
È anche possibile scegliere di verificare l'esistenza di un overflow aritmetico in un blocco di codice specificando l'opzione del compilatore (/checked) nella riga di comando o direttamente in Visual Studio per ogni singolo progetto. |
Nota: