Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Logische Operatoren vergleichen Boolean
Ausdrücke und geben ein Boolean
Ergebnis zurück. Die And
Operatoren , Or
, , AndAlso
OrElse
und Xor
Operatoren sind binär, da sie zwei Operanden annehmen, während der Not
Operator unär ist, da er einen einzelnen Operanden benötigt. Einige dieser Operatoren können auch bitweise logische Vorgänge für integrale Werte ausführen.
Unärer logischer Operator
Der Operator "Not" führt eine logische Negation für einen Boolean
Ausdruck aus. Er liefert das logische Gegenteil zu seinem Operanden. Wenn der Ausdruck True
ergibt, gibt Not
False
zurück; wenn der Ausdruck False
ergibt, gibt Not
True
zurück. Im folgenden Beispiel wird dies veranschaulicht.
Dim x, y As Boolean
x = Not 23 > 14
y = Not 23 > 67
' The preceding statements set x to False and y to True.
Binäre logische Operatoren
Der And-Operator führt logische Konjunktionen für zwei Boolean
Ausdrücke aus. Wenn beide Ausdrücke zu True
ausgewertet werden, gibt And
True
zurück. Wenn mindestens einer der Ausdrücke den Wert False
ergibt, dann gibt And
False
zurück.
Der Or-Operator führt logische Disjunktion oder Einschluss in zwei Boolean
Ausdrücken durch. Wenn entweder ein Ausdruck als True
ausgewertet wird oder beide als True
ausgewertet werden, dann gibt Or
True
zurück. Wenn keiner der Ausdrücke als True
ausgewertet wird, gibt Or
den Wert False
zurück.
Der Xor-Operator führt logischen Ausschluss für zwei Boolean
Ausdrücke aus. Wenn genau ein Ausdruck als True
ausgewertet wird, aber nicht beide, gibt Xor
True
zurück. Wenn beide Ausdrücke auf True
oder False
ausgewertet werden, gibt Xor
False
zurück.
Im folgenden Beispiel werden die And
, Or
und Xor
Operatoren veranschaulicht.
Dim a, b, c, d, e, f, g As Boolean
a = 23 > 14 And 11 > 8
b = 14 > 23 And 11 > 8
' The preceding statements set a to True and b to False.
c = 23 > 14 Or 8 > 11
d = 23 > 67 Or 8 > 11
' The preceding statements set c to True and d to False.
e = 23 > 67 Xor 11 > 8
f = 23 > 14 Xor 11 > 8
g = 14 > 23 Xor 8 > 11
' The preceding statements set e to True, f to False, and g to False.
Short-Circuiting logische Vorgänge
Der AndAlso-Operator ist dem Operator sehr ähnlich And
, da er auch logische Konjunktionen für zwei Boolean
Ausdrücke ausführt. Der Hauptunterschied zwischen den beiden besteht darin, dass AndAlso
ein Kurzschlussverhalten aufweist. Wenn der erste Ausdruck in einem AndAlso
Ausdruck zu False
ausgewertet wird, wird der zweite Ausdruck nicht ausgewertet, da er das Endergebnis nicht verändern kann und AndAlso
False
zurückgibt.
In ähnlicher Weise führt der OrElse-Operator eine Kurzschlussauswertung bei einer logischen Disjunktion von zwei Boolean
-Ausdrücke durch. Wenn der erste Ausdruck in einem OrElse
Ausdruck zu True
ausgewertet wird, wird der zweite Ausdruck nicht ausgewertet, da er das Endergebnis nicht verändern kann und OrElse
True
zurückgibt.
Zielkonflikte bei der Kurzschlussauswertung
Eine Kurzschlussauswertung kann die Leistung verbessern, indem ein Ausdruck, der das Ergebnis der logischen Operation nicht verändern kann, nicht ausgewertet wird. Wenn dieser Ausdruck jedoch zusätzliche Aktionen ausführt, werden diese Aktionen bei der Kurzschlussauswertung übersprungen. Wenn der Ausdruck beispielsweise einen Aufruf einer Function
-Prozedur enthält, wird diese Prozedur bei einer Kurzschlussauswertung des Ausdrucks nicht aufgerufen, und jeglicher weiterer Code, der in Function
enthalten ist, wird nicht ausgeführt. Daher kann die Funktion nur gelegentlich ausgeführt werden und möglicherweise nicht ordnungsgemäß getestet werden. Oder möglicherweise hängt die Programmlogik vom Code in Function
ab.
Das folgende Beispiel veranschaulicht den Unterschied zwischen And
, Or
und deren Kurzschluss-Gegenstücken.
Dim amount As Integer = 12
Dim highestAllowed As Integer = 45
Dim grandTotal As Integer
If amount > highestAllowed And checkIfValid(amount) Then
' The preceding statement calls checkIfValid().
End If
If amount > highestAllowed AndAlso checkIfValid(amount) Then
' The preceding statement does not call checkIfValid().
End If
If amount < highestAllowed Or checkIfValid(amount) Then
' The preceding statement calls checkIfValid().
End If
If amount < highestAllowed OrElse checkIfValid(amount) Then
' The preceding statement does not call checkIfValid().
End If
Function checkIfValid(ByVal checkValue As Integer) As Boolean
If checkValue > 15 Then
MsgBox(CStr(checkValue) & " is not a valid value.")
' The MsgBox warning is not displayed if the call to
' checkIfValid() is part of a short-circuited expression.
Return False
Else
grandTotal += checkValue
' The grandTotal value is not updated if the call to
' checkIfValid() is part of a short-circuited expression.
Return True
End If
End Function
Beachten Sie im vorherigen Beispiel, dass einige wichtige Code innerhalb checkIfValid()
nicht ausgeführt werden, wenn der Anruf kurzgeschaltet ist. Die erste If
-Anweisung ruft checkIfValid()
auf, obwohl 12 > 45
den Wert False
zurückgibt, da And
keine Kurzschlussauswertung durchführt. Die zweite If
-Anweisung ruft checkIfValid()
nicht auf, weil 12 > 45
False
zurückgibt und AndAlso
den zweiten Ausdruck dadurch überspringt. Die dritte If
Anweisung ruft checkIfValid()
auf, auch wenn 12 < 45
True
zurückgibt, da Or
keinen Kurzschluss verursacht. Die vierte If
-Anweisung ruft checkIfValid()
nicht auf, da 12 < 45
eine Kurzschlussauswertung für den zweiten Ausdruck durchführt, wenn True
den Wert OrElse
zurückgibt.
Bitweise Operationen
Bitweise Vorgänge werten zwei integrale Werte in binärer Form (Basis 2) aus. Sie vergleichen die Bits an entsprechenden Positionen und weisen dann basierend auf dem Vergleich Werte zu. Das folgende Beispiel veranschaulicht den And
Operator.
Dim x As Integer
x = 3 And 5
Im vorherigen Beispiel wird der Wert von x
auf 1 festgelegt. Dies geschieht aus folgenden Gründen:
Die Werte werden als binär behandelt:
3 in binärer Form = 011
5 in binärer Form = 101
Der
And
-Operator vergleicht die binären Darstellungen, eine Binärposition (Bit) nach der anderen. Wenn beide Bits an einer bestimmten Position 1 sind, wird eine 1 an dieser Position im Ergebnis platziert. Wenn eines der Bits 0 ist, wird eine 0 an dieser Position im Ergebnis platziert. Im vorstehenden Beispiel funktioniert dies wie folgt:011 (3 in binärer Form)
101 (5 in binärer Form)
001 (Das Ergebnis in binärer Form)
Das Ergebnis wird als Dezimalzahl behandelt. Der Wert 001 ist die binäre Darstellung von 1, also
x
= 1.
Der bitweise Or
Vorgang ist ähnlich, mit der Ausnahme, dass dem Ergebnisbit eine 1 zugewiesen wird, wenn eine oder beide der verglichenen Bits 1 sind.
Xor
weist dem Ergebnisbit eine 1 zu, wenn genau eines der verglichenen Bits (nicht beide) 1 ist.
Not
verwendet einen einzelnen Operanden und invertiert alle Bits, einschließlich des Zeichenbits, und weist diesen Wert dem Ergebnis zu. Dies bedeutet, Not
dass bei signierten positiven Zahlen immer ein negativer Wert zurückgegeben wird und für negative Zahlen Not
immer ein positiver oder Nullwert zurückgegeben wird.
Die Operatoren AndAlso
und OrElse
unterstützen keine bitweisen Vorgänge.
Hinweis
Bitweise Vorgänge können nur für integrale Typen ausgeführt werden. Gleitkommawerte müssen in integrale Typen konvertiert werden, bevor die bitweise Operation fortgesetzt werden kann.