Aracılığıyla paylaş


Visual Basic'te 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. And, Or, AndAlso, OrElse ve Xor iki işlenen aldıklarından dolayı ikili işlemcilerdir, oysa Not tek bir işlenen aldığı için tekil bir işlemcidir. Bu işleçlerden bazıları, tam sayı değerlerinde bit düzeyinde mantıksal işlemler de gerçekleştirebilir.

Tekli Mantıksal İşleç

Not İşleci bir ifade üzerinde mantıksal Boolean gerçekleştirir. İşlenenin mantıksal karşıtını verir. İfade şu değeri alırsa True, NotFalse değerini döndürür; ifade şu değeri alırsa False, NotTrue değerini döndürür. Aşağıdaki örnekte bu gösterilmektedir.

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 ifade üzerinde mantıksal Boolean gerçekleştirir. Her iki ifade de True olarak değerlendirilirse, o zaman AndTrue döndürür. İfadelerden en az biri False olarak değerlendirilirse, o zaman AndFalse değerini döndürür.

Or İşleci, iki ifadede mantıksal ayrıştırma veya Boolean gerçekleştirir. İfadelerden biri True olarak değerlendirilirse veya her ikisi de True olarak değerlendirilirse, OrTrue döndürür. Eğer her iki ifade de True ile değerlendirilmezse, OrFalse döndürür.

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

Aşağıdaki örnek, And, Or ve Xor işleçlerini göstermektedir.

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 Mantıksal İşlemler

AndAlso İşleci, And işlecine çok benzer; bu işleç, iki Boolean ifade üzerinde mantıksal bağlaç gerçekleştirir. İkisi arasındaki temel fark, AndAlso 'in kısa devre davranışı sergilemesidir. İ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.

Short-Circuiting Trade-Offs

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 devreyle sonuçlanırsa bu yordam çağrılmaz ve Function içindeki ek kod çalışmaz. 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 örnek, And ve Or ile bunların kısa devre karşılıkları arasındaki farkı göstermektedir.

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 If ifadesi, checkIfValid()12 > 45 döndürse bile False çağırır, çünkü And kısa devre yapmaz. If deyiminin ikincisi checkIfValid() çağırmaz çünkü 12 > 45, False döndürdüğünde AndAlso, ikinci ifadeyi devre dışı bırakır. Üçüncü If deyim, checkIfValid()12 < 45 döndürse bile True çağrı yapar çünkü Or kısa devre yapmaz. Dördüncü If deyimi checkIfValid()'yi çağırmaz, çünkü 12 < 45True döndürdüğünde, OrElse 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. And işleci aşağıdaki örnekte gösterilmektedir.

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, ikili gösterimleri bir kerede bir ikili konum (bit) kıyaslayarak 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 beş)

    001 (sonuç, ikili formda)

  • 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 tam olarak 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.

Uyarı

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 bakınız