Megosztás a következőn keresztül:


Logikai és bitenkénti operátorok a Visual Basicben

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 nem számít, 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 kiértékelése True, majd Not eredménye False; ha a kifejezés kiértékelése így történik False, akkor Not visszaadja a függvényt 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 Boolean kifejezésen végez logikai kötőszót. Ha mindkét kifejezés kiértékelésre kerül True, akkor And visszaadja a függvényt True. Ha a kifejezések közül legalább egy kiértékelésre kerül False, akkor And a visszaadott Falseértéket adja vissza.

Az Or operátor logikai tiltást vagy belefoglalást hajt végre két Boolean kifejezésen. Ha bármelyik kifejezés kiértékeli a Trueértéket, vagy mindkettő kiértékeli azt True, akkor Or a visszaadott értéket Trueadja vissza. Ha egyik kifejezés sem értékeli ki a függvényt True, Or akkor a visszaadott Falseértéket adja vissza.

Az Xor operátor két Boolean kifejezésen végez logikai kizárást. 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 kiértékelésre kerül True , vagy mindkettő a függvényre van kiértékelve False, Xor a visszaadott Falseértéket adja vissza.

Az alábbi példa a , Orés Xor operátorokat Andszemlé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.

Rövidzárolású 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 egy kifejezés első kifejezése AndAlso kiértékelésre Falsekerül, akkor a második kifejezés nem lesz kiértékelve, mert nem módosíthatja a végeredmé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 egy kifejezés első kifejezése OrElse kiértékelésre Truekerül, akkor a második kifejezés nem lesz kiértékelve, mert nem módosíthatja a végeredményt, és OrElse visszaadja True.

Rövidzárlatú kereskedelmi ügyletek

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 programlogika függhet a kódtól a Function.

Az alábbi példa a , Orés rövidzárlatú társaik közötti Andkülönbséget szemlélteti.

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 néhány fontos kód nem checkIfValid() fut, ha a hívás rövidzárlatú. Az első If utasítás a visszatérés Falseellenére 12 > 45 is hívcheckIfValid(), mert And nem rövidzárlat. A második If utasítás nem hívja meg checkIfValid()a függvénytFalseAndAlso, mert a visszatéréskor 12 > 45 a második kifejezés rövidre van adva. A harmadik If utasítás a visszatérés Trueellenére 12 < 45 is hívcheckIfValid(), mert Or nem rövidzárlatot tartalmaz. A negyedik If utasítás nem hívja megcheckIfValid(), mert a visszatéréskor True12 < 45OrElse a második kifejezés rövidre van adva.

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 1 értéket x állít 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 1, akkor az eredményben egy 1 lesz az adott pozícióban. 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.

Feljegyzé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.

Lásd még