Operatori aritmetici in Visual Basic
Gli operatori aritmetici consentono di eseguire molte delle comuni operazioni aritmetiche che comportano il calcolo di valori numerici rappresentati da valori letterali, variabili, altre espressioni, chiamate di funzioni e di proprietà e costanti. Vengono classificati come operatori aritmetici anche gli operatori di spostamento di bit, che operano a livello dei singoli bit degli operandi spostando gli schemi di bit a sinistra o a destra.
Operazioni aritmetiche
È possibile sommare due valori di un'espressione con l'Operatore + (Visual Basic) oppure sottrarne uno da un altro con l'Operatore - (Visual Basic), come illustrato nell'esempio seguente.
Dim x As Integer
x = 67 + 34
x = 32 - 12
L'Operatore - (Visual Basic) viene utilizzato anche per la negazione, ma con un solo operando, come illustrato nell'esempio seguente.
Dim x As Integer = 65
Dim y As Integer
y = -x
Per la moltiplicazione e la divisione vengono utilizzati rispettivamente l'Operatore * (Visual Basic) e l'Operatore / (Visual Basic), come illustrato nell'esempio seguente.
Dim y As Double
y = 45 * 55.23
y = 32 / 23
L'Operatore ^ (Visual Basic) viene utilizzato per l'elevamento a potenza, 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 di interi viene eseguita con l'Operatore \ (Visual Basic). La divisione di interi restituisce il quoziente, ovvero il valore intero che rappresenta il numero di volte in cui il divisore sta nel dividendo senza tenere conto di eventuali resti. Per questo operatore, sia il divisore che il dividendo devono essere tipi integrali (SByte, Byte, Short, UShort, Integer, UInteger, Long e ULong). È necessario che tutti gli altri tipi vengano prima convertiti in un tipo integrale. Nell'esempio riportato di seguito viene illustrata la divisione di interi.
Dim k As Integer
k = 23 \ 5
' The preceding statement sets k to 4.
Il modulo aritmetico viene eseguito con l'Operatore Mod (Visual Basic). Questo operatore restituisce il resto dopo che il dividendo è stato diviso per il divisore per un numero intero 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, anche il valore restituito è a virgola mobile. Nell'esempio che segue 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 produce risultati diversi a seconda dei tipi di dati utilizzati. Nelle divisioni di integrali (SByte, Byte, Short, UShort, Integer, UInteger, Long, ULong), .NET Framework genera un'eccezione DivideByZeroException. Anche nel caso di operazioni di divisione con tipi di dati Decimal o Single, .NET Framework genera un'eccezione DivideByZeroException.
Nelle divisioni a virgola mobile relative a tipi di dati Double non viene generata alcuna eccezione e il risultato è il membro della classe che rappresenta NaN, PositiveInfinity o NegativeInfinity, a seconda del dividendo. Nella tabella seguente sono riassunti i vari risultati ottenuti cercando di dividere un valore Double per zero.
Tipo di dati del dividendo |
Tipo di dati del divisore |
Valore del dividendo |
Risultato |
Double |
Double |
0 |
NaN (numero non definito matematicamente) |
Double |
Double |
> 0 |
|
Double |
Double |
< 0 |
Quando viene rilevata un'eccezione DivideByZeroException, è possibile gestirla utilizzandone i membri. Ad esempio, nella proprietà Message è memorizzato il testo del messaggio relativo all'eccezione. Per ulteriori informazioni, vedere Cenni preliminari sulla gestione delle eccezioni strutturata per Visual Basic.
Operazioni di spostamento di bit
Un'operazione di spostamento di bit esegue uno spostamento aritmetico su uno schema di bit. Lo schema è contenuto nell'operando sulla sinistra, mentre l'operando sulla destra specifica il numero di posizioni di spostamento dello schema. È possibile spostare lo schema a destra con l'Operatore >> (Visual Basic) o a sinistra con l'Operatore << (Visual Basic).
Il tipo di dati dell'operando dello schema deve essere SByte, Byte, Short, UShort, Integer, UInteger, Long o ULong. Il tipo di dati dell'operando relativo all'entità dello spostamento deve essere Integer o deve ampliarsi a Integer.
Gli spostamenti aritmetici non sono circolari. In altre parole, i bit spostati oltre una delle estremità del risultato non vengono reintrodotti all'altra estremità. Le posizioni di bit liberate da uno spostamento vengono impostate nel modo seguente:
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, Integer o Long)
Nell'esempio che segue viene effettuato uno spostamento sia a sinistra che a destra di un valore Integer.
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 e Xor possono eseguire anche operazioni aritmetiche bit per bit se utilizzati con valori numerici. Per ulteriori informazioni, vedere la sezione relativa alle operazioni bit per bit in Operatori logici e bit per bit in Visual Basic.
Indipendenza dai tipi
È solitamente necessario che gli operandi siano dello stesso tipo. Se, ad esempio, si esegue un'addizione con una variabile Integer, è necessario che il secondo termine sia un'altra variabile Integer e che la variabile cui viene assegnato il risultato sia anch'essa di tipo Integer.
Nella scrittura di codice indipendente dai tipi è buona norma utilizzare Istruzione Option Strict. Se si imposta Option Strict On, Visual Basic esegue automaticamente conversioni indipendenti dai tipi. Se, ad esempio, si cerca di sommare una variabile Integer a una variabile Double e di assegnare il valore a una variabile Double, l'operazione viene eseguita normalmente, perché è possibile convertire un valore Integer in Double senza perdita di dati. Nel caso di conversioni non indipendenti dai tipi, d'altra parte, l'uso di Option Strict On genera un errore di compilazione. Se, ad esempio, si cerca di sommare una variabile Integer a una variabile Double e di assegnare il valore a una variabile Integer, viene generato un errore di compilazione, perché una variabile Double non può essere convertita in modo implicito nel tipo Integer.
Se si imposta Option Strict Off, tuttavia, Visual Basic consente conversioni implicite verso un tipo di dati più piccolo, sebbene possano determinare una perdita imprevista di dati o di precisione. Per questo motivo si raccomanda di utilizzare Option Strict On durante la scrittura di codice di produzione. Per ulteriori informazioni, vedere Conversioni di ampliamento e restrizione (Visual Basic).
Vedere anche
Riferimenti
Operatori aritmetici (Visual Basic)
Operatori di scorrimento bit (Visual Basic)
Concetti
Operatori di confronto in Visual Basic
Operatori di concatenazione in Visual Basic