Visual Basic'de Mantıksal ve Bit Düzeyinde İşleçler

Mantıksal işleçler ifadeleri karşılaştırır Boolean ve bir Boolean sonuç döndürür. , , , AndAlsoOrElse, ve Xor işleçleri iki işlenen aldığından ikilidir, işleç tek bir işlenen aldığından Not tek bir işleçtir. OrAnd Bu işleçlerden bazıları, tam sayı değerlerinde bit düzeyinde mantıksal işlemler de gerçekleştirebilir.

Birli Mantıksal İşleç

Not İşleci bir Boolean ifade üzerinde mantıksal olumsuzlama gerçekleştirir. İşleneninin mantıksal tersini verir. İfade olarak değerlendirilirse TrueNot döndürürFalse; ifade olarak değerlendirilirse Falsedöndürür NotTrue. Aşağıdaki örnek bunu göstermektedir.

Dim x, y As Boolean
x = Not 23 > 14
y = Not 23 > 67
' The preceding statements set x to False and y to True.

İkili Mantıksal İşleçler

And İşleci iki Boolean ifade üzerinde mantıksal bağlaç gerçekleştirir. her iki ifade de olarak değerlendirilirse TrueAnd döndürürTrue. İfadelerden en az biri olarak değerlendirilirse FalseAnd döndürürFalse.

Or İşleci, iki Boolean ifadede mantıksal ayrıştırma veya ekleme gerçekleştirir. İfadelerden Truebiri olarak değerlendirilirse veya her ikisi de olarak değerlendirilirse OrTruedöndürürTrue. her iki ifade de olarak değerlendirilirse TruedöndürürFalseOr.

Xor İşleci iki Boolean ifadede mantıksal dışlama gerçekleştirir. Tam olarak bir ifade olarak değerlendirilirse Trueama her ikisini birden değerlendirmezse döndürür XorTrue. her iki ifade de olarak değerlendirilirse True veya her ikisi de olarak değerlendirilirse False, Xor döndürür False.

Aşağıdaki örnekte , Orve Xor işleçleri gösterilmektedirAnd.

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.

Kısa Devre Mantıksal İşlemleri

AndAlso İşleci işlecineAnd çok benzer, bu işleç de iki Boolean ifade üzerinde mantıksal bağlaç gerçekleştirir. İkisi arasındaki temel fark, kısa devre davranışının sergilenmesidir AndAlso. İfadedeki AndAlso ilk ifade olarak değerlendirilirse False, ikinci ifade nihai sonucu değiştiremediğinden değerlendirilmez ve AndAlso döndürür False.

Benzer şekilde, OrElse İşleci iki Boolean ifadede kısa devre mantıksal ayrıştırma gerçekleştirir. İfadedeki OrElse ilk ifade olarak değerlendirilirse True, ikinci ifade nihai sonucu değiştiremediğinden değerlendirilmez ve OrElse döndürür True.

Kısa DevreLi DengelemeLer

Kısa devre, mantıksal işlemin sonucunu değiştiremeyen bir ifadeyi değerlendirmeyerek performansı artırabilir. Ancak, bu ifade ek eylemler gerçekleştirirse, kısa devre bu eylemleri atlar. Örneğin, ifade bir Function yordama çağrı içeriyorsa, ifade kısa devreliyse ve içinde bulunan Function ek kodlar çalışmazsa bu yordam çağrılmaz. Bu nedenle işlev yalnızca ara sıra çalışabilir ve doğru şekilde test edilemeyebilir. Veya program mantığı içindeki Functionkoda bağlı olabilir.

Aşağıdaki örnekte , ve Orbunların kısa devre karşılıkları arasındaki Andfark gösterilmektedir.

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

Yukarıdaki örnekte, çağrı kısa devreli olduğunda içindeki checkIfValid() bazı önemli kodların çalışmadığını unutmayın. İlk deyim, Falsedöndürse 12 > 45 bile çağrısı checkIfValid() yapar çünkü And kısa devre If yapmaz. döndürürken False12 > 45AndAlso ikinci ifade kısa devreler çünkü ikinci If deyimi çağırmaz.checkIfValid() Üçüncü If deyim, döndürse 12 < 45Truebile çağrısı checkIfValid() yapar çünkü Or kısa devre yapmaz. Dördüncü If deyim çağırmıyorcheckIfValid(), çünkü döndürdüğünde 12 < 45TrueOrElse ikinci ifadeyi kısa devre yapar.

Bit Düzeyinde İşlemler

Bit düzeyinde işlemler ikili (2 tabanı) biçimindeki iki tamser değerini değerlendirir. Karşılık gelen konumlardaki bitleri karşılaştırır ve ardından karşılaştırmaya göre değerler atarlar. Aşağıdaki örnekte işleci gösterilmektedir And .

Dim x As Integer
x = 3 And 5

Yukarıdaki örnek değerini x 1 olarak ayarlar. Bu durum aşağıdaki nedenlerle gerçekleşir:

  • Değerler ikili olarak değerlendirilir:

    İkili biçimde 3 = 011

    İkili biçimde 5 = 101

  • And işleci, bir kerede bir ikili konum (bit) olan ikili gösterimleri karşılaştırır. Belirli bir konumdaki her iki bit de 1 ise, sonuçta bu konuma bir 1 yerleştirilir. Bitlerden biri 0 ise, sonuçta bu konuma bir 0 yerleştirilir. Yukarıdaki örnekte bu aşağıdaki gibi çalışır:

    011 (ikili biçimde 3)

    101 (ikili biçimde 5)

    001 (sonuç, ikili biçimde)

  • Sonuç ondalık olarak değerlendirilir. 001 değeri 1'in ikili gösterimidir, yani x = 1.

Bit tabanlı Or işlem benzerdir, ancak karşılaştırılan bitlerden biri veya her ikisi de 1 ise sonuç bitine 1 atanır. Xor karşılaştırılan bitlerden biri (ikisini birden değil) 1 ise sonuç bitine 1 atar. Not tek bir işlenen alır ve işaret biti de dahil olmak üzere tüm bitleri ters çevirir ve sonuç için bu değeri atar. Bu, Not imzalı pozitif sayılar için her zaman negatif bir değer ve negatif sayılar Not için her zaman pozitif veya sıfır değeri döndürdüğü anlamına gelir.

AndAlso ve OrElse işleçleri bit düzeyinde işlemleri desteklemez.

Not

Bit düzeyinde işlemler yalnızca tam sayı türlerinde gerçekleştirilebilir. Bit düzeyinde işlem devam etmeden önce kayan nokta değerleri tam sayı türlerine dönüştürülmelidir.

Ayrıca bkz.