Freigeben über


Arithmetische Operatoren in Visual Basic

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

Arithmetische Vorgänge

Sie können zwei Werte in einem Ausdruck zusammen mit dem +-Operator hinzufügen oder einen von einem 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), jedoch mit nur einem Operanden, wie im folgenden Beispiel veranschaulicht.

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

Multiplikation und Division verwenden den Operator * bzw. / (Visual Basic), wie das folgende Beispiel zeigt.

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

Die Exponentiation 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).

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. Sowohl der Divisor als auch die Dividende müssen integrale Typen (SByte, Byte, Short, UShortInteger, , UInteger, und LongULong) für diesen Operator sein. Alle anderen Typen müssen zuerst in einen integralen Typ konvertiert werden. Im folgenden Beispiel wird eine ganzzahlige Division veranschaulicht.

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

Modulusarithmetik wird mithilfe des Mod-Operators ausgeführt. Dieser Operator gibt den Rest zurück, nachdem der Dividend mit integraler Häufigkeit durch den Divisor geteilt wurde. Wenn sowohl Divisor als auch Dividende integrale Typen sind, ist der zurückgegebene Wert integral. Wenn Divisor und Dividend Gleitkommatypen sind, ist der zurückgegebene Wert ebenfalls ein Gleitkommawert. Im folgenden 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 nach Null hat je nach den beteiligten Datentypen unterschiedliche Ergebnisse. In integralen Abteilungen (SByte, Byte, Short, UShort, Integer, UInteger, Long, ULong) löst die .NET Framework eine DivideByZeroException Ausnahme aus. Bei Divisionen des Decimal- oder Single-Datentyps löst das .NET Framework auch eine DivideByZeroException-Ausnahme aus.

In Gleitkommateilungen, die den Double-Datentyp einbeziehen, wird keine Ausnahme ausgelöst, und das Ergebnis ist, abhängig vom Dividendenbetrag, das Klassenmitglied, das NaN, PositiveInfinity oder NegativeInfinity darstellt. In der folgenden Tabelle sind die verschiedenen Ergebnisse zusammengefasst, in der versucht wird, einen Double Wert durch Null zu dividieren.

Dividendendatentyp Divisor-Datentyp Dividendenwert 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. Beispielsweise enthält die Message Eigenschaft den Nachrichtentext für die Ausnahme. Weitere Informationen finden Sie unter Try...Catch...Finally-Anweisung.

Bitverschiebungsoperationen

Ein Bitverschiebungsvorgang führt eine arithmetische Verschiebung an einem 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 das Muster zu verschieben. Sie können das Muster mit dem >> Operator nach rechts oder nach links mit dem << Operator verschieben.

Der Datentyp des Musteroperanden muss SByte, Byte, Short, UShort, Integer, UInteger, Long, oder ULong. 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 entfernt werden, nicht am anderen Ende wieder angefügt werden. Die durch eine Schicht freigestellten Bitpositionen werden wie folgt festgelegt:

  • 0 für eine arithmetische Linksverschiebung

  • 0 für eine arithmetische rechte Verschiebung einer positiven Zahl

  • 0 für eine arithmetische rechte Verschiebung 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 lösen niemals Überlauf-Ausnahmen aus.

Bitweise Operationen

Zusätzlich zu ihrer Rolle als logische Operatoren führen Not, Or, And und Xor auch bitweise Arithmetik aus, wenn sie auf numerische Werte angewendet werden. Weitere Informationen finden Sie unter "Bitweise Vorgänge" in logischen und bitweisen Operatoren in Visual Basic.

Typsicherheit

Operanden sollten normalerweise vom selben Typ sein. Wenn Sie zum Beispiel eine Addition mit einer Integer Variable ausführen, sollten Sie sie mit einer anderen Integer Variable addieren und das Ergebnis einer Variablen vom Typ Integer zuweisen.

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

Wenn Sie jedoch festlegen Option Strict Off, ermöglicht Visual Basic implizite Eingrenzungskonvertierungen, obwohl sie zu einem unerwarteten Verlust von Daten oder Genauigkeit führen können. Aus diesem Grund wird empfohlen, beim Schreiben von Produktionscode zu verwenden Option Strict On . Weitere Informationen finden Sie unter Widening and Narrowing Conversions.

Siehe auch