Opérateurs arithmétiques en Visual Basic

Les opérateurs arithmétiques sont utilisés pour effectuer de nombreuses opérations arithmétiques familières qui impliquent le calcul de valeurs numériques représentées par des littéraux, des variables, d’autres expressions, des appels de fonction et de propriété et des constantes. Également classés avec des opérateurs arithmétiques sont les opérateurs de décalage de bits, qui agissent au niveau des bits individuels des opérandes et déplacent leurs modèles de bits vers la gauche ou la droite.

Opérations arithmétiques

Vous pouvez ajouter deux valeurs dans une expression avec l’opérateur + ou soustraire l’une de l’autre avec l’opérateur - (Visual Basic), comme l’illustre l’exemple suivant.

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

La négation utilise également l’opérateur - (Visual Basic), mais avec un seul opérande, comme l’illustre l’exemple suivant.

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

La multiplication et la division utilisent respectivement l’opérateur * et l’opérateur / (Visual Basic),comme l’illustre l’exemple suivant.

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

L’exposant utilise l’opérateur ^, comme l’illustre l’exemple suivant.

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

La division entière est effectuée à l’aide de l’opérateur \ (Visual Basic). La division entière retourne le quotient, autrement dit, l’entier qui représente le nombre de fois où le diviseur peut se diviser en dividende sans tenir compte du reste. Le diviseur et le dividende doivent être des types intégraux (SByte, Byte, ShortUShort, Integer, UInteger, Longet ULong) pour cet opérateur. Tous les autres types doivent d’abord être convertis en type intégral. L’exemple suivant illustre la division entière.

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

Le modulus arithmétique est effectué à l’aide de l’opérateur Mod. Cet opérateur retourne le reste après avoir divisé le diviseur en dividende un nombre intégral de fois. Si les deux diviseurs et dividendes sont des types intégraux, la valeur retournée est intégrale. Si le diviseur et le dividende sont des types à virgule flottante, la valeur retournée est également à virgule flottante. L'exemple ci-dessous illustre ce comportement.

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.

Tentative de division par zéro

La division par zéro a des résultats différents en fonction des types de données impliqués. Dans les divisions intégrales (SByte, Byte, Short, UShort, Integer, UInteger, Long, ULong), le .NET Framework lève une exception DivideByZeroException. Dans les opérations de division sur le type de données Decimal ou Single, le .NET Framework lève également une exception DivideByZeroException.

Dans les divisions à virgule flottante impliquant le type de données Double, aucune exception n’est levée, et le résultat est le membre de classe représentant NaN, PositiveInfinityou NegativeInfinity, en fonction du dividende. Le tableau suivant récapitule les différents résultats de la tentative de division d’une valeur par zéro Double.

Type de données de dividende Type de données de diviseur Valeur du dividende Résultats
Double Double 0 NaN (pas un nombre mathématiquement défini)
Double Double > 0 PositiveInfinity
Double Double < 0 NegativeInfinity

Lorsque vous interceptez une exception DivideByZeroException, vous pouvez utiliser ses membres pour vous aider à le gérer. Par exemple, la propriété Message contient le texte du message pour l’exception. Pour plus d’informations, consultez Try...Catch...Finally, instruction.

Opérations de décalage de bits

Une opération de décalage de bits effectue un décalage arithmétique sur un modèle de bits. Le modèle est contenu dans l’opérande à gauche, tandis que l’opérande sur la droite spécifie le nombre de positions à déplacer. Vous pouvez déplacer le modèle vers la droite avec >>l’opérateur ou vers la gauche avec <<l’opérateur.

Le type de données de l’opérande de modèle doit être SByte, Byte, Short, UShort, Integer, UInteger, Long ou ULong. Le type de données de l’opérande de décalage doit être Integer ou doit s’élargir à Integer.

Les décalages arithmétiques ne sont pas circulaires, ce qui signifie que les bits décalés d’une extrémité du résultat ne sont pas réintroduites à l’autre extrémité. Les positions de bits libérées par un décalage sont définies comme suit :

  • 0 pour un décalage arithmétique gauche

  • 0 pour un décalage de droite arithmétique d’un nombre positif

  • 0 pour un décalage arithmétique vers la droite d’un type de données non signé (Byte, UShort, UInteger, ULong)

  • 1 pour un décalage arithmétique vers la droite d’un nombre négatif (SByte, Short, Integerou Long)

L’exemple suivant déplace une valeur Integer à la fois vers la gauche et la droite.

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.

Les décalages arithmétiques ne génèrent jamais d’exceptions de dépassement de capacité.

Opérations au niveau du bit

En plus d’être des opérateurs logiques, Not, Or, And, et Xor effectuent également des arithmétiques au niveau du bit lorsqu’ils sont utilisés sur des valeurs numériques. Pour plus d’informations, consultez « Opérations au niveau du bit » dans les opérateurs logiques et au niveau du bit dans Visual Basic.

Cohérence des types

Les opérandes doivent normalement être du même type. Par exemple, si vous effectuez des ajouts avec une variable Integer, vous devez l’ajouter à une autre variable Integer et vous devez également affecter le résultat à une variable de type Integer.

Une façon de garantir une bonne pratique de codage de type sécurisé consiste à utiliser l’instruction Option Strict. Si vous définissez Option Strict On, Visual Basic effectue automatiquement des conversions de type sécurisé. Par exemple, si vous essayez d’ajouter une variable Integer à une variable Double et d’affecter la valeur à une variable Double, l’opération se poursuit normalement, car une valeur Integer peut être convertie en Double sans perte de données. Les conversions de type non sécurisé, d’autre part, provoquent une erreur du compilateur avec Option Strict On. Par exemple, si vous essayez d’ajouter une variable Integer à une variable Double et d’affecter la valeur à une variable Integer, une erreur du compilateur se produit, car une variable Double ne peut pas être convertie implicitement en type Integer.

Si vous définissez Option Strict Off, toutefois, Visual Basic permet aux conversions de réduction implicites de se produire, bien qu’elles puissent entraîner une perte inattendue de données ou de précision. Pour cette raison, nous vous recommandons d’utiliser Option Strict On lors de l’écriture de code de production. Pour plus d’informations, consultez Widening and Narrowing Conversions.

Voir aussi