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
oderLong
)
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.