Operatori aritmetici in Visual BasicArithmetic Operators in Visual Basic

Gli operatori aritmetici vengono utilizzati per eseguire molte delle operazioni aritmetiche note che interessano il calcolo dei valori numerici rappresentati da valori letterali, variabili, altre espressioni, chiamate di funzioni e proprietà e costanti.Arithmetic operators are used to perform many of the familiar arithmetic operations that involve the calculation of numeric values represented by literals, variables, other expressions, function and property calls, and constants. Gli operatori aritmetici, inoltre, sono gli operatori di spostamento di bit, che agiscono a livello dei singoli bit degli operandi e spostano gli schemi di bit a sinistra o a destra.Also classified with arithmetic operators are the bit-shift operators, which act at the level of the individual bits of the operands and shift their bit patterns to the left or right.

Operazioni aritmeticheArithmetic Operations

È possibile aggiungere due valori in un'espressione insieme all' operatore +oppure sottrarne uno da un altro con l' operatore-(Visual Basic), come illustrato nell'esempio riportato di seguito.You can add two values in an expression together with the + Operator, or subtract one from another with the - Operator (Visual Basic), as the following example demonstrates.

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.Negation also uses the - Operator (Visual Basic), but with only one operand, as the following example demonstrates.

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

La moltiplicazione e la divisione utilizzano rispettivamente l'operatore * e /(Visual Basic), come illustrato nell'esempio riportato di seguito.Multiplication and division use the * Operator and / Operator (Visual Basic), respectively, as the following example demonstrates.

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

L'elevamento a potenza usa l' operatore ^, come illustrato nell'esempio seguente.Exponentiation uses the ^ Operator, as the following example demonstrates.

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

La divisione di interi viene eseguita utilizzando l' operatore \ (Visual Basic).Integer division is carried out using the \ Operator (Visual Basic). La divisione integer restituisce il quoziente, ovvero il numero intero che rappresenta il numero di volte in cui il divisore può dividere il dividendo senza considerare alcun resto.Integer division returns the quotient, that is, the integer that represents the number of times the divisor can divide into the dividend without consideration of any remainder. Il divisore e il dividendo devono essere tipi integrali (SByte, Byte, Short, UShort, Integer, UInteger, Longe ULong) per questo operatore.Both the divisor and the dividend must be integral types (SByte, Byte, Short, UShort, Integer, UInteger, Long, and ULong) for this operator. Tutti gli altri tipi devono prima essere convertiti in un tipo integrale.All other types must be converted to an integral type first. Nell'esempio seguente viene illustrata la divisione di interi.The following example demonstrates integer division.

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

Il modulo aritmetico viene eseguito usando l' operatore mod.Modulus arithmetic is performed using the Mod Operator. Questo operatore restituisce il resto dopo aver diviso il divisore nel dividendo un numero integrale di volte.This operator returns the remainder after dividing the divisor into the dividend an integral number of times. Se il divisore e il dividendo sono tipi integrali, il valore restituito è integrale.If both divisor and dividend are integral types, the returned value is integral. Se divisore e dividendo sono tipi a virgola mobile, anche il valore restituito è a virgola mobile.If divisor and dividend are floating-point types, the returned value is also floating-point. Nell'esempio seguente viene illustrato questo comportamento.The following example demonstrates this behavior.

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 zeroAttempted Division by Zero

La divisione per zero presenta risultati diversi a seconda dei tipi di dati interessati.Division by zero has different results depending on the data types involved. Nelle divisioni integrali (SByte, Byte, Short, UShort, Integer``UInteger, Long``ULong.NET Framework), il DivideByZeroException genera un'eccezione.In integral divisions (SByte, Byte, Short, UShort, Integer, UInteger, Long, ULong), the .NET Framework throws a DivideByZeroException exception. Nelle operazioni di divisione sul tipo di dati Decimal o Single, il .NET Framework genera anche un'eccezione DivideByZeroException.In division operations on the Decimal or Single data type, the .NET Framework also throws a DivideByZeroException exception.

Nelle divisioni a virgola mobile che coinvolgono il tipo di dati Double non viene generata alcuna eccezione e il risultato è il membro della classe che rappresenta NaN, PositiveInfinityo NegativeInfinity, a seconda del dividendo.In floating-point divisions involving the Double data type, no exception is thrown, and the result is the class member representing NaN, PositiveInfinity, or NegativeInfinity, depending on the dividend. Nella tabella seguente vengono riepilogati i vari risultati del tentativo di dividere un valore Double per zero.The following table summarizes the various results of attempting to divide a Double value by zero.

Tipo di dati DividendDividend data type Tipo di dati divisoreDivisor data type Valore DividendDividend value RisultatoResult
Double Double 00 NaN (non è un numero definito matematicamente)NaN (not a mathematically defined number)
Double Double > 0> 0 PositiveInfinity
Double Double < 0< 0 NegativeInfinity

Quando si intercetta un'eccezione di DivideByZeroException, è possibile usare i relativi membri per gestirla.When you catch a DivideByZeroException exception, you can use its members to help you handle it. Ad esempio, la proprietà Message include il testo del messaggio per l'eccezione.For example, the Message property holds the message text for the exception. Per altre informazioni, vedere Istruzione Try...Catch...Finally.For more information, see Try...Catch...Finally Statement.

Operazioni di spostamento di bitBit-Shift Operations

Un'operazione di spostamento di bit esegue un turno aritmetico in uno schema di bit.A bit-shift operation performs an arithmetic shift on a bit pattern. Il modello è contenuto nell'operando a sinistra, mentre l'operando a destra specifica il numero di posizioni per lo spostamento del pattern.The pattern is contained in the operand on the left, while the operand on the right specifies the number of positions to shift the pattern. È possibile spostare il pattern a destra con l' operatore > > o a sinistra con l' operatore < <.You can shift the pattern to the right with the >> Operator or to the left with the << Operator.

Il tipo di dati dell'operando del criterio deve essere SByte, Byte, Short, UShort, Integer, UInteger, Longo ULong.The data type of the pattern operand must be SByte, Byte, Short, UShort, Integer, UInteger, Long, or ULong. Il tipo di dati dell'operando di spostamento dell'importo deve essere Integer o deve essere ampliato a Integer.The data type of the shift amount operand must be Integer or must widen to Integer.

I turni aritmetici non sono circolari, il che significa che i bit spostati da un'estremità del risultato non vengono reintrodotti nell'altra estremità.Arithmetic shifts are not circular, which means the bits shifted off one end of the result are not reintroduced at the other end. Le posizioni dei bit sgomberate da uno spostamento vengono impostate nel modo seguente:The bit positions vacated by a shift are set as follows:

  • 0 per uno scorrimento a sinistra aritmetico0 for an arithmetic left shift

  • 0 per uno spostamento a destra aritmetico di un numero positivo0 for an arithmetic right shift of a positive number

  • 0 per uno spostamento a destra aritmetico di un tipo di dati senza segno (Byte, UShort, UInteger, ULong)0 for an arithmetic right shift of an unsigned data type (Byte, UShort, UInteger, ULong)

  • 1 per uno spostamento a destra aritmetico di un numero negativo (SByte, Short, Integero Long)1 for an arithmetic right shift of a negative number (SByte, Short, Integer, or Long)

Nell'esempio seguente viene spostato un valore Integer sia a sinistra che a destra.The following example shifts an Integer value both left and right.

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.

I turni aritmetici non generano mai eccezioni di overflow.Arithmetic shifts never generate overflow exceptions.

Operazioni bit per bitBitwise Operations

Oltre a essere operatori logici, Not, Or, Ande Xor eseguono anche operazioni aritmetiche bit per bit se utilizzate su valori numerici.In addition to being logical operators, Not, Or, And, and Xor also perform bitwise arithmetic when used on numeric values. Per ulteriori informazioni, vedere "operazioni bit per bit" negli operatori logici e bit per bit in Visual Basic.For more information, see "Bitwise Operations" in Logical and Bitwise Operators in Visual Basic.

Indipendenza dai tipiType Safety

Gli operandi devono essere in genere dello stesso tipo.Operands should normally be of the same type. Se ad esempio si sta aggiungendo una variabile di Integer, è necessario aggiungerla a un'altra variabile Integer ed è necessario assegnare anche il risultato a una variabile di tipo Integer.For example, if you are doing addition with an Integer variable, you should add it to another Integer variable, and you should assign the result to a variable of type Integer as well.

Per garantire una corretta procedura di codifica indipendente dai tipi, è possibile usare l' istruzione Option Strict.One way to ensure good type-safe coding practice is to use the Option Strict Statement. Se si imposta Option Strict On, Visual Basic esegue automaticamente le conversioni indipendenti dai tipi .If you set Option Strict On, Visual Basic automatically performs type-safe conversions. Se, ad esempio, si tenta di aggiungere una variabile Integer a una variabile Double e si assegna il valore a una variabile Double, l'operazione procede normalmente, perché un valore Integer può essere convertito in Double senza perdita di dati.For example, if you try to add an Integer variable to a Double variable and assign the value to a Double variable, the operation proceeds normally, because an Integer value can be converted to Double without loss of data. Le conversioni non sicure del tipo, d'altra parte, generano un errore del compilatore con Option Strict On.Type-unsafe conversions, on the other hand, cause a compiler error with Option Strict On. Se, ad esempio, si tenta di aggiungere una variabile Integer a una variabile Double e si assegna il valore a una variabile Integer, viene restituito un errore del compilatore, perché una variabile Double non può essere convertita in modo implicito nel tipo Integer.For example, if you try to add an Integer variable to a Double variable and assign the value to an Integer variable, a compiler error results, because a Double variable cannot be implicitly converted to type Integer.

Se si imposta Option Strict Off, tuttavia, Visual Basic consente di eseguire conversioni implicite verso un tipo di dati più piccolo, sebbene possano causare una perdita imprevista di dati o di precisione.If you set Option Strict Off, however, Visual Basic allows implicit narrowing conversions to take place, although they can result in the unexpected loss of data or precision. Per questo motivo, è consigliabile usare Option Strict On durante la scrittura di codice di produzione.For this reason, we recommend that you use Option Strict On when writing production code. Per altre informazioni, vedere Widening and Narrowing Conversions.For more information, see Widening and Narrowing Conversions.

Vedere ancheSee also