Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Logische operators vergelijken Boolean
expressies en retourneren een Boolean
resultaat. De And
operatoren , Or
, AndAlso
en OrElse
Xor
operators zijn binair omdat ze twee operanden nemen, terwijl de Not
operator unaire is omdat er één operand nodig is. Sommige van deze operators kunnen ook bitwise logische bewerkingen uitvoeren op integrale waarden.
Unaire Logische Operator
De operator Not voert logische negatie uit op een Boolean
expressie. Het levert het logische tegenovergestelde van de operand op. Als de uitdrukking resulteert in True
, retourneert Not
False
; als de uitdrukking resulteert in False
, retourneert Not
True
. In het volgende voorbeeld ziet u dit.
Dim x, y As Boolean
x = Not 23 > 14
y = Not 23 > 67
' The preceding statements set x to False and y to True.
Binaire logische operators
De and-operator voert logische combinaties uit op twee Boolean
expressies. Als beide expressies True
worden geëvalueerd, retourneert And
True
. Als ten minste één van de expressies resulteert in False
, dan retourneert And
False
.
De operator Of voert logische disjunction of insluiting uit op twee Boolean
expressies. Als een van beide expressies resulteert in True
, of beide evalueren naar True
, dan wordt Or
True
geretourneerd. Als geen van beide expressies tot True
leidt, retourneert Or
False
.
De Xor-operator voert logische uitsluiting uit op twee Boolean
expressies. Als precies één expressie resulteert in True
, maar niet beide, Xor
retourneert True
. Als beide expressies evalueren naar True
of beide evalueren naar False
, retourneert Xor
False
.
In het volgende voorbeeld worden de And
, Or
en Xor
operatoren geïllustreerd.
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 bewerkingen
De AndAlso-operator is vergelijkbaar met de And
operator, omdat deze ook logische combinaties uitvoert op twee Boolean
expressies. Het belangrijkste verschil tussen de twee is dat AndAlso
kortsluitingsgedrag vertoont. Als de eerste expressie in een AndAlso
-expressie evalueert naar False
, wordt de tweede expressie niet uitgevoerd omdat dit het uiteindelijke resultaat niet kan veranderen en AndAlso
False
retourneert.
Op dezelfde manier voert de OrElse-operator een kortsluitende logische disjunctie uit op twee Boolean
uitdrukkingen. Als de eerste expressie in een OrElse
-expressie evalueert naar True
, wordt de tweede expressie niet uitgevoerd omdat dit het uiteindelijke resultaat niet kan veranderen en OrElse
True
retourneert.
Short-Circuiting Trade-Offs
Kortsluiting kan de prestaties verbeteren door geen expressie te evalueren die het resultaat van de logische bewerking niet kan wijzigen. Als deze expressie echter aanvullende acties uitvoert, slaat kortsluiting deze acties over. Als de expressie bijvoorbeeld een aanroep naar een Function
procedure bevat, wordt deze procedure niet aangeroepen als de expressie kortsluiting heeft en eventuele aanvullende code in de Function
expressie niet wordt uitgevoerd. Daarom kan de functie slechts af en toe worden uitgevoerd en wordt deze mogelijk niet correct getest. Of de programmalogica kan afhankelijk zijn van de code in de Function
.
In het volgende voorbeeld ziet u het verschil tussen And
, Or
en hun tegenhangers voor kortsluiting.
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
Houd er in het voorgaande voorbeeld rekening mee dat enkele belangrijke stukken code binnen checkIfValid()
niet worden uitgevoerd wanneer de aanroep is kortgesloten. De eerste If
instructie roept checkIfValid()
aan, ook al retourneert 12 > 45
False
, omdat And
geen kortsluiting veroorzaakt. De tweede If
-instructie roept checkIfValid()
niet aan, omdat wanneer 12 > 45
False
retourneert, AndAlso
de tweede expressie kortsluit. De derde If
uitspraak roept checkIfValid()
aan, ook al retourneert 12 < 45
True
, omdat Or
niet kortsluit. De vierde If
instructie roept checkIfValid()
niet aan, omdat wanneer 12 < 45
True
retourneert, OrElse
de tweede expressie kortsluit.
Bitsgewijze bewerkingen
Bitwise-bewerkingen evalueren twee integrale waarden in binaire vorm (basis 2). Ze vergelijken de bits op overeenkomende posities en wijzen vervolgens waarden toe op basis van de vergelijking. In het volgende voorbeeld ziet u de And
operator.
Dim x As Integer
x = 3 And 5
In het voorgaande voorbeeld wordt de waarde van x
1 ingesteld. Dit gebeurt om de volgende redenen:
De waarden worden behandeld als binair:
3 in binaire vorm = 011
5 in binaire vorm = 101
De
And
operator vergelijkt de binaire weergaven, één binaire positie (bit) tegelijk. Als beide bits op een bepaalde positie 1 zijn, wordt een 1 in die positie in het resultaat geplaatst. Als een van beide bits 0 is, wordt er een 0 in die positie in het resultaat geplaatst. In het voorgaande voorbeeld werkt dit als volgt:011 (3 in binaire vorm)
101 (5 in binaire vorm)
001 (het resultaat, in binaire vorm)
Het resultaat wordt behandeld als decimaal. De waarde 001 is de binaire weergave van 1, dus
x
= 1.
De bitsgewijze Or
bewerking is vergelijkbaar, behalve dat een 1 is toegewezen aan de resultaatbit als een van de vergeleken bits 1 is.
Xor
wijst een 1 toe aan de resultaatbit als precies één van de vergeleken bits (niet beide) 1 is.
Not
gebruikt één operand en zet alle bits om, inclusief de teken-bit, en wijst die waarde toe aan het resultaat. Dit betekent dat voor ondertekende positieve getallen Not
altijd een negatieve waarde wordt geretourneerd en voor negatieve getallen Not
altijd een positieve of nulwaarde wordt geretourneerd.
De AndAlso
en OrElse
operators bieden geen ondersteuning voor bitsgewijze bewerkingen.
Opmerking
Bitwise-bewerkingen kunnen alleen worden uitgevoerd op integrale typen. Waarden voor drijvende komma moeten worden geconverteerd naar integrale typen voordat bitgewijze bewerkingen kunnen worden voortgezet.