Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A logikai operátorok összehasonlítják Boolean
a kifejezéseket, és eredményt adnak vissza Boolean
. A And
, Or
, AndAlso
, OrElse
és Xor
operátorok binárisak, mert két operandust vesznek fel, míg az Not
operátor unáris, mert egyetlen operandusra van szükség. Ezen operátorok némelyike bitenkénti logikai műveleteket is végrehajthat az integrálértékeken.
Unary logikai operátor
A Nem operátor logikai tagadást hajt végre egy Boolean
kifejezésen. Az operandus logikai ellentétét adja. Ha a kifejezés értéke True
, akkor Not
visszaadja False
; ha a kifejezés értéke False
, akkor Not
visszaadja True
. Az alábbi példa ezt szemlélteti.
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áris logikai operátorok
Az And Operátor két kifejezésen végez logikai Boolean
. Ha mindkét kifejezés kiértékelése True
, akkor And
visszaadja True
. Ha a kifejezések közül legalább egy kiértékelődik False
, akkor And
visszaadja False
értéket.
Az Or operátor logikai tiltást vagy belefoglalást hajt végre két Boolean
kifejezésen. Ha bármelyik kifejezés eredménye True
, vagy mindkettő eredménye True
, akkor Or
visszaadja a True
értéket. Ha egyik kifejezés sem értékel True
értéket, akkor Or
visszaadja False
.
Az Xor operátor két kifejezésen végez logikai Boolean
. Ha pontosan egy kifejezés kiértékelése True
, de nem mindkettő, Xor
akkor a függvény eredménye True
. Ha mindkét kifejezés True
-ra, vagy mindkettő False
-re értékelődik ki, akkor a Xor
visszaadja False
-t.
Az alábbi példa a And
, Or
és Xor
operátorokat szemlélteti.
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 logikai műveletek
Az AndAlso operátor nagyon hasonlít az And
operátorra, mivel két Boolean
kifejezésen is logikai kötőszót hajt végre. A legfontosabb különbség a kettő között az, hogy AndAlso
rövidzárlatos viselkedést mutat. Ha az első kifejezés egy AndAlso
kifejezésben False
értékelésre kerül, akkor a második kifejezés nem kerül kiértékelésre, mert nem befolyásolhatja a végső eredményt, és AndAlso
visszaadja False
.
Hasonlóképpen, az OrElse operátor két Boolean
kifejezésen rövidzárlatú logikai disjunctiont hajt végre. Ha az első kifejezés egy OrElse
kifejezésben True
értékelésre kerül, akkor a második kifejezés nem kerül kiértékelésre, mert nem befolyásolhatja a végső eredményt, és OrElse
visszaadja True
.
Short-Circuiting Trade-Offs
A rövidzárolás javíthatja a teljesítményt, ha nem értékel ki olyan kifejezést, amely nem tudja módosítani a logikai művelet eredményét. Ha azonban ez a kifejezés további műveleteket hajt végre, a rövidzárolás kihagyja ezeket a műveleteket. Ha például a kifejezés tartalmaz egy eljáráshívástFunction
, a rendszer nem hívja meg az eljárást, ha a kifejezés rövidzárlatú, és a további kód nem fut.Function
Ezért előfordulhat, hogy a függvény csak alkalmanként fut, és nem megfelelően van tesztelve. Vagy a program-logika a Function
kódtól függhet.
Az alábbi példa szemlélteti a And
, a Or
és a rövidzárlatú társaik közötti különbséget.
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
Az előző példában vegye figyelembe, hogy a checkIfValid()
-ben lévő néhány fontos kód nem fut le, amikor a hívás leáll. Az első If
utasítás akkor is meghívja checkIfValid()
, amikor 12 > 45
visszatér False
, mert And
nem rövidzárlatot okoz. A második If
utasítás nem hívja meg checkIfValid()
, mert amikor 12 > 45
visszatér False
-val, akkor AndAlso
rövidre zárja a második kifejezést. A harmadik If
utasítás meghívja a checkIfValid()
-t, még akkor is, ha 12 < 45
visszatér True
, mert a Or
nem rövidzár (nem rövidzár tartalmaz). A negyedik If
utasítás nem hívja meg checkIfValid()
, mert amikor 12 < 45
visszatér True
értékkel, OrElse
rövidre zárja a második kifejezést.
Bitenkénti műveletek
A Bitwise-műveletek két integrálértéket értékelnek ki bináris (2. alap) formában. Összehasonlítják a biteket a megfelelő pozíciókban, majd az összehasonlítás alapján értékeket rendelnek hozzá. Az alábbi példa az operátort szemlélteti And
.
Dim x As Integer
x = 3 And 5
Az előző példa x
értékét 1-re állítja be. Ez a következő okokból történik:
Az értékek binárisként vannak kezelve:
3 bináris formában = 011
5 bináris formában = 101
Az
And
operátor egyszerre egy bináris pozíciót (bitet) hasonlít össze a bináris reprezentációkkal. Ha egy adott pozíció mindkét bitje egyforma és értéke 1, akkor az eredményben egy 1 kerül az adott pozícióba. Ha bármelyik bit 0, akkor a 0 a helyére kerül az eredményben. Az előző példában ez a következőképpen működik:011 (3 bináris formában)
101 (5 bináris formában)
001 (Az eredmény bináris formában)
Az eredmény decimálisként lesz kezelve. A 001 érték az 1 bináris ábrázolása, tehát
x
= 1.
A bitenkénti Or
művelet hasonló, azzal a kivételrel, hogy az eredménybithez egy 1 van rendelve, ha az összehasonlított bitek vagy mindkettő 1.
Xor
1-et rendel az eredménybithez, ha az összehasonlított bitek (nem mindkettő) egyike 1.
Not
egyetlen operandust vesz fel, és az összes bitet invertálta, beleértve a jelbitet is, és hozzárendeli ezt az értéket az eredményhez. Ez azt jelenti, Not
hogy az aláírt pozitív számok esetében mindig negatív értéket ad vissza, a negatív számok Not
esetében pedig mindig pozitív vagy nulla értéket ad vissza.
Az AndAlso
és OrElse
az operátorok nem támogatják a bitenkénti műveleteket.
Megjegyzés:
Bitenkénti műveletek csak integrál típusok esetében hajtható végre. A lebegőpontos értékeket a bitenkénti művelet folytatása előtt integráltípusokká kell konvertálni.