Operatori

In C# è disponibile un elevato numero di operatori, ovvero simboli utilizzati per specificare quali operazioni eseguire in un'espressione. Operazioni sui tipi integrali quali ==, !=, <, >, <=, >=, binary +, binary -, ^, &, |, ~, ++, -- e sizeof() di solito sono consentite nelle enumerazioni. È inoltre possibile sottoporre a overload molti operatori, in modo da modificarne il significato quando vengono applicati a tipi definiti dall'utente.

Nella tabella seguente sono elencati gli operatori di C# raggruppati in ordine di precedenza. Gli operatori all'interno di ogni gruppo hanno precedenza uguale.

Categoria degli operatori

Operatori

Primario

x.y

f(x)

a[x]

x++

x--

new

typeof

Selezionato

unchecked

default(T)

delegato

->

Unario

+

-

!

~

++x

--x

(T)x

true

false

&

sizeof

Moltiplicazione

*

/

%

Addizione

+

-

Spostamento

<<

>>

Relazione e verifica del tipo

<

>

<=

>=

è

as

Uguaglianza

==

!=

AND logico

&

XOR logico

^

OR logico

|

AND condizionale

&&

OR condizionale

||

Null-coalescing

??

Condizionale

?:

Assegnazione ed espressione lambda

=

+=

-=

*=

/=

%=

&=

|=

^=

<<=

>>=

= > Operatore lambda

Overflow di valori aritmetici

Gli operatori aritmetici (+, -, *, /) possono produrre risultati non compresi nell'intervallo di valori possibili per il tipo numerico specifico. Per informazioni dettagliate, fare riferimento alla sezione su un operatore specifico. Di seguito, sono riportate alcune informazioni generali.

  • Un overflow di valori aritmetici interi genera un'eccezione OverflowException o elimina i bit più significativi del risultato. La divisione di numeri interi per zero genera sempre un'eccezione DivideByZeroException.

  • Un overflow di valori aritmetici a virgola mobile o una divisione per zero non genera mai un'eccezione perché i tipi a virgola mobile sono basati su IEEE 754 e possono pertanto rappresentare valori infiniti e NaN (Not a Number).

  • Un overflow di valori aritmetici decimali genera sempre un'eccezione OverflowException. La divisione di valori decimali per zero genera sempre un'eccezione DivideByZeroException.

Quando si verifica un overflow di valori interi, i risultati variano a seconda del contesto di esecuzione, che può essere checked o unchecked. Nei contesti checked viene generata un'eccezione OverflowException. Nei contesti unchecked, l'esecuzione continua dopo che sono stati scartati i bit più significativi del risultato. Pertanto, C# consente all'utente di gestire o ignorare l'overflow.

L'overflow viene generato non solo dagli operatori aritmetici, ma anche dai cast da tipo integrale a tipo integrale, ad esempio il cast di long in int, che possono essere eseguiti in contesti checked o unchecked. Tuttavia, gli operatori bit per bit e shift non generano mai overflow.

Vedere anche

Riferimenti

Operatori che supportano l'overload (Guida per programmatori C#)

Parole chiave di C#

Concetti

Guida per programmatori C#

Altre risorse

Riferimenti per C#

Visual C#