Arithmetische Operatoren in Visual Basic

Arithmetische Operatoren werden verwendet, um viele der bekannten arithmetischen Operationen auszuführen, die die Berechnung numerischer Werte umfassen, die durch Literale, Variablen, andere Ausdrücke, Funktions- und Eigenschaftsaufrufe und Konstanten dargestellt werden. Die Bitverschiebungsoperatoren, die auf der Ebene der einzelnen Bits der Operanden agieren und ihre Bitmuster nach links oder rechts verschieben, werden ebenfalls mit arithmetischen Operatoren klassifiziert.

Arithmetische Operationen

Sie können zwei Werte in einem Ausdruck zusammen mit dem +-Operator hinzufügen oder einen Wert vom anderen mit dem --Operator (Visual Basic) subtrahieren, wie im folgenden Beispiel veranschaulicht.

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

Die Negation verwendet auch den --Operator (Visual Basic), aber nur mit einem Operanden, wie im folgenden Beispiel veranschaulicht.

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

Multiplikation und Division verwenden den *-Operator und den /-Operator (Visual Basic), wie im folgenden Beispiel veranschaulicht.

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

Die Potenzierung verwendet den ^-Operator, wie im folgenden Beispiel veranschaulicht.

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

Die Ganzzahldivision wird mit dem \-Operator (Visual Basic) durchgeführt. Die Ganzzahldivision gibt den Quotienten zurück, d. h. die ganze Zahl, die die Häufigkeit darstellt, mit der der Dividend ohne Rest durch den Divisor geteilt werden kann. Divisor und Dividend müssen für diesen Operator integrale Typen (SByte, Byte, Short, UShort, Integer, UInteger, Long und ULong) sein. Alle anderen Typen müssen zuerst in einen integralen Typ konvertiert werden. Im folgenden Beispiel wird die Ganzzahldivision veranschaulicht.

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

Die Modulusarithmetik wird mit dem Mod-Operator ausgeführt. Dieser Operator gibt den Rest zurück, nachdem der Dividend mit integraler Häufigkeit durch den Divisor geteilt wurde. Wenn Divisor und Dividend integrale Typen sind, ist der zurückgegebene Wert integral. Wenn Divisor und Dividend Gleitkommatypen sind, ist der zurückgegebene Wert ebenfalls ein Gleitkommawert. In folgendem Beispiel wird dieses Verhalten veranschaulicht.

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.

Versuchte Division durch null (0)

Die Division durch 0 (null) hat je nach den beteiligten Datentypen unterschiedliche Ergebnisse. In integralen Divisionen (SByte, Byte, Short, UShort, Integer, UInteger, Long, ULong) löst .NET Framework eine DivideByZeroException-Ausnahme aus. Bei Divisionsvorgängen für den Decimal- oder Single-Datentyp löst .NET Framework auch eine DivideByZeroException-Ausnahme aus.

In Gleitkommadivisionen, die den Double-Datentyp betreffen, wird keine Ausnahme ausgelöst, und das Ergebnis ist der Klassenmember, der je nach Dividend NaN, PositiveInfinity oder NegativeInfinity darstellt. In der folgenden Tabelle sind die verschiedenen Ergebnisse des Versuchs zusammengefasst, einen Double-Wert durch null (0) zu dividieren.

Dividenddatentyp Divisordatentyp Dividendwert Ergebnis
Double Double 0 NaN (keine mathematisch definierte Zahl)
Double Double > 0 PositiveInfinity
Double Double < 0 NegativeInfinity

Wenn Sie eine DivideByZeroException-Ausnahme abfangen, können Sie deren Member verwenden, um sie zu behandeln. Die Message-Eigenschaft enthält beispielsweise den Meldungstext für die Ausnahme. Weitere Informationen finden Sie unter Try...Catch...Finally-Anweisung.

Bitverschiebungsoperationen

Ein Bitverschiebungsvorgang führt eine arithmetische Verschiebung für ein Bitmuster aus. Das Muster ist im Operanden auf der linken Seite enthalten, während der Operand auf der rechten Seite die Anzahl der Positionen angibt, um die das Muster verschoben werden soll. Sie können das Muster mit dem >>-Operator nach rechts oder mit dem <<-Operator nach links verschieben.

Der Datentyp des Musteroperanden muss SByte, Byte, Short, UShort, Integer, UInteger, Long oder ULong sein. Der Datentyp des Verschiebungsbetragsoperanden muss Integer sein oder auf Integer erweitert werden.

Arithmetische Verschiebungen sind nicht kreisförmig, was bedeutet, dass die Bits, die von einem Ende des Ergebnisses verschoben werden, am anderen Ende nicht wieder eingeführt werden. Die durch eine Verschiebung frei werdenden Bitpositionen werden wie folgt festgelegt:

  • 0 für eine arithmetische Linksverschiebung

  • 0 für eine arithmetische Rechtsverschiebung einer positiven Zahl

  • 0 für eine arithmetische Rechtsverschiebung eines nicht signierten Datentyps (Byte, UShort, UInteger, ULong)

  • 1 für eine arithmetische Rechtsverschiebung einer negativen Zahl (SByte, Short, Integer oder Long)

Im folgenden Beispiel wird ein Integer-Wert sowohl nach links als auch nach rechts verschoben.

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.

Arithmetische Verschiebungen erzeugen nie Überlaufausnahmen.

Bitweise Operationen

Not, Or, And und Xor sind nicht nur logische Operatoren, sondern führen auch bitweise Arithmetik aus, wenn sie für numerische Werte verwendet werden. Weitere Informationen finden Sie unter „Bitweise Vorgänge“ in Logische und bitweise Operatoren in Visual Basic.

Typsicherheit

Operanden sollten normalerweise vom selben Typ sein. Wenn Sie beispielsweise eine Addition mit einer Integer-Variablen durchführen, sollten Sie sie einer anderen Integer-Variablen hinzufügen, und Sie sollten das Ergebnis ebenfalls einer Variablen vom Typ Integer zuweisen.

Eine Möglichkeit, eine gute typsichere Codierungspraxis sicherzustellen, ist die Verwendung der Option Strict-Anweisung. Wenn Sie Option Strict On festlegen, führt Visual Basic automatisch typsichere Konvertierungen aus. Wenn Sie beispielsweise versuchen, einer Integer-Variablen eine Double-Variable hinzuzufügen und den Wert einer Double-Variablen zuzuweisen, wird der Vorgang normal fortgesetzt, da ein Integer-Wert ohne Datenverlust in Double konvertiert werden kann. Typunsichere Konvertierungen verursachen dagegen einen Compilerfehler mit Option Strict On. Wenn Sie beispielsweise versuchen, einer Integer-Variablen eine Double-Variable hinzuzufügen und den Wert einer Integer-Variablen zuzuweisen, tritt ein Compilerfehler auf, da eine Double-Variable nicht implizit in den Typ Integer konvertiert werden kann.

Wenn Sie Option Strict Off festlegen, lässt Visual Basic jedoch implizite einschränkende Konvertierungen zu, die jedoch zu unerwarteten Datenverlusten oder unerwartetem Genauigkeitsverlust führen können. Aus diesem Grund wird empfohlen, beim Schreiben von Produktionscode Option Strict On zu verwenden. Weitere Informationen finden Sie unter Widening and Narrowing Conversions.

Siehe auch