Operatori aritmetici in Visual Basic

Gli operatori aritmetici vengono usati per eseguire molte delle operazioni aritmetiche familiari che implicano il calcolo dei valori numerici rappresentati da valori letterali, variabili, altre espressioni, chiamate di funzione e proprietà e costanti. Classificato anche con operatori aritmetici sono gli operatori bit-shift, che agiscono a livello dei singoli bit degli operandi e spostano i modelli di bit a sinistra o destra.

Operazioni aritmetiche

È possibile aggiungere due valori in un'espressione insieme all'operatore + o sottraerne uno dall'altro con l'operatore - (Visual Basic), come illustrato nell'esempio seguente.

Dim x As Integer
x = 67 + 34
x = 32 - 12

La negazione usa anche l'operatore - Operatore (Visual Basic), ma con un solo operando, come illustrato nell'esempio seguente.

Dim x As Integer = 65
Dim y As Integer
y = -x

La moltiplicazione e la divisione usano rispettivamente l'operatore * e /operatore (Visual Basic), come illustrato nell'esempio seguente.

Dim y As Double
y = 45 * 55.23
y = 32 / 23

Exponentiation usa l'operatore ^ , come illustrato nell'esempio seguente.

Dim z As Double
z = 23 ^ 3
' The preceding statement sets z to 12167 (the cube of 23).

La divisione integer viene eseguita usando l'operatore \ (Visual Basic). La divisione integer restituisce il quoziente, ovvero l'intero che rappresenta il numero di volte in cui il divisore può dividersi nel dividendo senza considerare alcun resto. Sia il divisore che il dividendo devono essere tipi integrali (SByte, UShortIntegerShortUIntegerByteLong, e ULong) per questo operatore. Tutti gli altri tipi devono essere convertiti in un tipo integrale. Nell'esempio seguente viene illustrata la divisione integer.

Dim k As Integer
k = 23 \ 5
' The preceding statement sets k to 4.

Il modulo aritmetico viene eseguito usando l'operatore Mod. Questo operatore restituisce il resto dopo aver diviso il divisore nel dividendo un numero integrale di volte. Se sia il divisore che il dividendo sono tipi integrali, il valore restituito è integrale. Se il divisore e il dividendo sono tipi a virgola mobile, il valore restituito è anche a virgola mobile. Nell'esempio seguente viene illustrato questo comportamento.

Dim x As Integer = 100
Dim y As Integer = 6
Dim z As Integer
z = x Mod y
' The preceding statement sets z to 4.
Dim a As Double = 100.3
Dim b As Double = 4.13
Dim c As Double
c = a Mod b
' The preceding statement sets c to 1.18.

Tentativo di divisione per Zero

La divisione per zero ha risultati diversi a seconda dei tipi di dati coinvolti. Nelle divisioni integrali (SByte, ByteUIntegerShortIntegerLongUShortULong), .NET Framework genera un'eccezione.DivideByZeroException Nelle operazioni di divisione sul Decimal tipo di dati o Single , .NET Framework genera anche un'eccezione DivideByZeroException .

Nelle divisioni a virgola mobile che coinvolgono il Double tipo di dati, non viene generata alcuna eccezione e il risultato è il membro della classe che rappresenta NaN, PositiveInfinityo NegativeInfinity, a seconda del dividendo. La tabella seguente riepiloga i vari risultati del tentativo di dividere un Double valore per zero.

Tipo di dati dividendo Tipo di dati divisore Valore dividendo Risultato
Double Double 0 NaN (non un numero definito matematicamente)
Double Double > 0 PositiveInfinity
Double Double < 0 NegativeInfinity

Quando si rileva un'eccezione DivideByZeroException , è possibile usare i relativi membri per gestirlo. Ad esempio, la Message proprietà contiene il testo del messaggio per l'eccezione. Per altre informazioni, vedere Istruzione Try...Catch...Finally.

operazioni Bit-Shift

Un'operazione di spostamento a bit esegue uno spostamento aritmetico su un modello di bit. Il modello è contenuto nell'operando a sinistra, mentre l'operando a destra specifica il numero di posizioni da spostare. È possibile spostare il modello a destra con l'operatore>> o a sinistra con l'operatore<<.

Il tipo di dati dell'operando modello deve essere SByte, ShortIntegerUShortUIntegerByteLongo .ULong Il tipo di dati dell'operando di spostamento deve essere o deve essere Integer esteso a Integer.

I turni aritmetici non sono circolari, il che significa che i bit spostati fuori una fine del risultato non vengono reintrodotti all'altra fine. Le posizioni di bit vaccate da un turno sono impostate come segue:

  • 0 per uno spostamento aritmetico sinistro

  • 0 per un turno aritmetico destro di un numero positivo

  • 0 per un turno aritmetico destro di un tipo di dati senza segno (Byte, UShort, UInteger, ULong)

  • 1 per un turno aritmetico destro di un numero negativo (SByte, , ShortIntegero Long)

Nell'esempio seguente viene spostato un Integer valore sia a sinistra che a destra.

Dim lResult, rResult As Integer
Dim pattern As Integer = 12
' The low-order bits of pattern are 0000 1100.
lResult = pattern << 3
' A left shift of 3 bits produces a value of 96.
rResult = pattern >> 2
' A right shift of 2 bits produces value of 3.

Gli spostamenti aritmetici non generano mai eccezioni di overflow.

Operazioni bit per bit

Oltre a essere operatori logici, Not, Or, And, ed Xor eseguire anche aritmetica bit per bit quando usato sui valori numerici. Per altre informazioni, vedere "Operazioni bit per bit" in Operatori logici e bit per bit in Visual Basic.

Sicurezza dei tipi

Gli operandi devono in genere essere dello stesso tipo. Ad esempio, se si esegue l'aggiunta con una Integer variabile, è consigliabile aggiungerla a un'altra Integer variabile e assegnare anche il risultato a una variabile di tipo Integer .

Un modo per garantire una buona procedura di codifica sicura per il tipo consiste nell'usare l'istruzione Option Strict. Se si imposta Option Strict On, Visual Basic esegue automaticamente conversioni di tipo sicure . Ad esempio, se si tenta di aggiungere una Integer variabile a una variabile e di assegnare il valore a una DoubleDouble variabile, l'operazione procede normalmente, perché un Integer valore può essere convertito in Double senza perdita di dati. Le conversioni type-unsafe, invece, causano un errore del compilatore con Option Strict On. Ad esempio, se si tenta di aggiungere una Integer variabile a una variabile e di assegnare il valore a una DoubleInteger variabile, un errore del compilatore restituisce risultati, perché una Double variabile non può essere convertita implicitamente in tipo Integer.

Se si imposta Option Strict Off, tuttavia, Visual Basic consente l'esecuzione di conversioni implicite di restringezione, anche se possono causare la perdita imprevista di dati o precisione. Per questo motivo, è consigliabile usare Option Strict On durante la scrittura di codice di produzione. Per altre informazioni, vedere Widening and Narrowing Conversions.

Vedi anche