Condividi tramite


Operatori aritmetici in Visual Basic

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

Operazioni aritmetiche

È possibile aggiungere due valori in un'espressione insieme all'operatore + oppure sottrarrne 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 - (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 il resto. Sia il divisore che il dividendo devono essere tipi integrali (SByte, Byte, Short, UShortIntegerUInteger, , Long, e ULong) per questo operatore. Tutti gli altri tipi devono essere convertiti prima 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.

L'aritmetica del modulo viene eseguita usando l'operatore Mod. Questo operatore restituisce il resto dopo aver diviso il divisore nel dividendo un numero integrale di volte. Se sia divisore che dividendo sono tipi integrali, il valore restituito è integrale. Se divisore e dividendo sono tipi a virgola mobile, anche il valore restituito è 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, Byte, Short, UShort, Integer, UInteger, Long, ULong), il framework .NET genera un'eccezione DivideByZeroException. Nelle operazioni di divisione sul tipo di dati Decimal o Single, il .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 Dividend Tipo di dati Divisore Valore del 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 gestirla. Ad esempio, la Message proprietà contiene il testo del messaggio per l'eccezione. Per ulteriori informazioni, consultare Istruzione Try...Catch...Finally.

Bit-Shift Operazioni

Un'operazione di spostamento a bit esegue uno spostamento aritmetico su una sequenza 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 del pattern deve essere SByte, Byte, Short, UShort, Integer, UInteger, Long, o ULong. Il tipo di dati dell'operando di spostamento deve essere Integer o deve poter essere esteso a Integer.

Gli spostamenti aritmetici non sono circolari, il che significa che i bit spostati da un'estremità del risultato non sono reinseriti all'estremità opposta. Le posizioni dei bit liberate da uno spostamento vengono impostate come segue:

  • 0 per uno spostamento aritmetico a sinistra

  • 0 per uno spostamento aritmetico a destra di un numero positivo

  • 0 per uno spostamento aritmetico a destra di un tipo di dati senza segno (Byte, UShort, UInteger, ULong)

  • 1 per uno spostamento aritmetico a destra di un numero negativo (SByte, Short, Integero 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 scorrimenti aritmetici non generano mai eccezioni di overflow.

Operazioni bit per bit

Oltre a essere operatori logici, Not, Or, Ande Xor anche eseguire aritmetica bit per bit quando vengono usati su 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, è necessario aggiungerla a un'altra Integer variabile e assegnare il risultato anche a una variabile di tipo Integer .

Un modo per garantire una buona procedura di scrittura del codice indipendente dai tipi consiste nell'usare l'istruzione Option Strict. Se si imposta Option Strict On, Visual Basic esegue automaticamente conversioni tipizzate. Ad esempio, se si tenta di aggiungere una Integer variabile a una Double variabile e di assegnare il valore a una Double variabile, l'operazione procede normalmente, perché un Integer valore può essere convertito in Double senza perdita di dati. Le conversioni non sicure, d'altra parte, causano un errore del compilatore con Option Strict On. Ad esempio, se si tenta di aggiungere una Integer variabile a una Double variabile e di assegnare il valore a una Integer variabile, viene restituito un errore del compilatore, perché una Double variabile non può essere convertita in modo implicito nel tipo Integer.

Se si imposta Option Strict Off, Tuttavia, Visual Basic consente l'esecuzione di conversioni implicite di restringimento, anche se possono comportare 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 Conversioni di tipo Widening and Narrowing.

Vedere anche