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. , , , AndAlso
OrElse
, 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. Or
And
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 True
Not
döndürürFalse
; ifade olarak değerlendirilirse False
döndürür Not
True
. 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 True
And
döndürürTrue
. İfadelerden en az biri olarak değerlendirilirse False
And
döndürürFalse
.
Or İşleci, iki Boolean
ifadede mantıksal ayrıştırma veya ekleme gerçekleştirir. İfadelerden True
biri olarak değerlendirilirse veya her ikisi de olarak değerlendirilirse Or
True
döndürürTrue
. her iki ifade de olarak değerlendirilirse True
döndürürFalse
Or
.
Xor İşleci iki Boolean
ifadede mantıksal dışlama gerçekleştirir. Tam olarak bir ifade olarak değerlendirilirse True
ama her ikisini birden değerlendirmezse döndürür Xor
True
. 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 , Or
ve 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 Function
koda bağlı olabilir.
Aşağıdaki örnekte , ve Or
bunların kısa devre karşılıkları arasındaki And
fark 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, False
döndürse 12 > 45
bile çağrısı checkIfValid()
yapar çünkü And
kısa devre If
yapmaz. döndürürken False
12 > 45
AndAlso
ikinci ifade kısa devreler çünkü ikinci If
deyimi çağırmaz.checkIfValid()
Üçüncü If
deyim, döndürse 12 < 45
True
bile ç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 < 45
True
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. 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.