Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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
, Not
False
değerini döndürür; ifade şu değeri alırsa False
, Not
True
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 And
True
döndürür. İfadelerden en az biri False
olarak değerlendirilirse, o zaman And
False
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, Or
True
döndürür. Eğer her iki ifade de True
ile değerlendirilmezse, Or
False
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 Function
koda 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 < 45
True
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.