Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Operator logis membandingkan Boolean
ekspresi dan mengembalikan Boolean
hasil. Operator And
, Or
, AndAlso
, OrElse
, dan Xor
adalah biner karena mereka mengambil dua operand, sedangkan operator Not
adalah unari karena membutuhkan satu operand. Beberapa operator ini juga dapat melakukan operasi logis bitwise pada nilai integral.
Operator Logika Unary
Operator Not melakukan negasi logis pada ekspresi Boolean
. Ini menghasilkan kebalikan logis dari operandanya. Jika ekspresi mengevaluasi ke True
, maka Not
mengembalikan False
; jika ekspresi mengevaluasi ke False
, maka Not
mengembalikan True
. Contoh berikut mengilustrasikan hal ini.
Dim x, y As Boolean
x = Not 23 > 14
y = Not 23 > 67
' The preceding statements set x to False and y to True.
Operator Logika Biner
Operator Dan melakukan konjunsi logis pada dua Boolean
ekspresi. Jika kedua ekspresi mengevaluasi ke True
, maka And
mengembalikan True
. Jika setidaknya salah satu ekspresi dievaluasi ke False
, maka And
mengembalikan False
.
Operator OR melakukan disjungsi atau inklusi logis pada dua Boolean
ekspresi. Jika salah satu ekspresi mengevaluasi menjadi True
, atau kedua-duanya mengevaluasi menjadi True
, maka Or
mengembalikan True
. Jika tidak ada dari kedua ekspresi yang mengevaluasi ke True
, maka Or
mengembalikan False
.
Operator Xor melakukan pengecualian logis pada dua Boolean
ekspresi. Jika tepat satu ekspresi dievaluasi menjadi True
, tetapi tidak keduanya, maka Xor
akan mengembalikan True
. Jika kedua ekspresi mengevaluasi ke True
atau keduanya mengevaluasi ke False
, Xor
mengembalikan False
.
Contoh berikut mengilustrasikan operator And
, Or
, dan Xor
.
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.
Operasi Logis Short-Circuiting
Operator AndAlso sangat mirip dengan operator And
, karena juga melakukan konjungsi logis pada dua ekspresi Boolean
. Perbedaan utama antara keduanya adalah bahwa AndAlso
memiliki perilaku pemutusan cepat. Jika ekspresi pertama dalam AndAlso
ekspresi mengevaluasi ke False
, maka ekspresi kedua tidak dievaluasi karena tidak dapat mengubah hasil akhir, dan AndAlso
mengembalikan False
.
Demikian pula, Operator OrElse melakukan disjungsi logis pemutusan cepat pada dua Boolean
ekspresi. Jika ekspresi pertama dalam OrElse
ekspresi mengevaluasi ke True
, maka ekspresi kedua tidak dievaluasi karena tidak dapat mengubah hasil akhir, dan OrElse
mengembalikan True
.
Short-Circuiting Trade-Offs
Sirkuit pendek dapat meningkatkan performa dengan tidak mengevaluasi ekspresi yang tidak dapat mengubah hasil operasi logis. Namun, jika ekspresi tersebut melakukan tindakan tambahan, sirkuit pendek melewati tindakan tersebut. Misalnya, jika pernyataan menyertakan panggilan ke Function
prosedur, maka prosedur tersebut tidak akan dipanggil jika pernyataan diputus singkat, dan kode tambahan apa pun yang terkandung dalam Function
tidak berjalan. Oleh karena itu, fungsi mungkin hanya berjalan sesekali, dan mungkin tidak diuji dengan benar. Atau logika program mungkin bergantung pada kode di Function
.
Contoh berikut mengilustrasikan perbedaan antara And
, Or
, dan rekan sirkuit pendek mereka.
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
Dalam contoh sebelumnya, perhatikan bahwa beberapa kode penting di dalam checkIfValid()
tidak dijalankan ketika panggilannya dipercepat. Pernyataan pertama If
memanggil checkIfValid()
meskipun 12 > 45
mengembalikan False
, karena And
tidak short-circuit. Pernyataan kedua If
tidak memanggil checkIfValid()
, karena saat 12 > 45
mengembalikan False
, AndAlso
menghentikan ekspresi kedua lebih awal. Pernyataan ketiga If
memanggil checkIfValid()
meskipun 12 < 45
mengembalikan True
, karena Or
tidak melakukan pemutusan awal. Pernyataan keempat If
tidak memanggil checkIfValid()
, karena ketika 12 < 45
mengembalikan True
, OrElse
menghentikan ekspresi yang kedua.
Operasi Bitwise
Operasi bitwise mengevaluasi dua nilai integral dalam bentuk biner (dasar 2). Mereka membandingkan bit pada posisi yang sesuai dan kemudian menetapkan nilai berdasarkan perbandingan. Contoh berikut mengilustrasikan And
operator.
Dim x As Integer
x = 3 And 5
Contoh sebelumnya menetapkan nilai x
menjadi 1. Ini terjadi karena alasan berikut:
Nilai diperlakukan sebagai biner:
3 dalam bentuk biner = 011
5 dalam bentuk biner = 101
Operator
And
membandingkan representasi biner, satu posisi biner (bit) pada satu waktu. Jika kedua bit pada posisi tertentu adalah 1, maka 1 ditempatkan dalam posisi tersebut dalam hasil. Jika salah satu bit adalah 0, maka 0 ditempatkan dalam posisi tersebut dalam hasil. Dalam contoh sebelumnya, ini berfungsi sebagai berikut:011 (3 dalam bentuk biner)
101 (5 dalam bentuk biner)
001 (Hasilnya, dalam bentuk biner)
Hasilnya diperlakukan sebagai desimal. Nilai 001 adalah representasi biner 1, jadi
x
= 1.
Operasi bitwise Or
serupa, kecuali bahwa 1 ditetapkan pada bit hasil jika salah satu atau kedua-duanya dari bit yang dibandingkan adalah 1.
Xor
menetapkan 1 ke bit hasil jika tepat salah satu bit yang dibandingkan (bukan keduanya) adalah 1.
Not
menggunakan satu operan dan menginversi semua bit, termasuk bit tanda, dan menetapkan nilai tersebut sebagai hasil. Ini berarti bahwa untuk angka positif yang ditandatangani, Not
selalu mengembalikan nilai negatif, dan untuk angka negatif, Not
selalu mengembalikan nilai positif atau nol.
Operator AndAlso
dan OrElse
tidak mendukung operasi bitwise.
Nota
Operasi bitwise hanya dapat dilakukan pada jenis integral. Nilai floating-point harus dikonversi ke jenis integral sebelum operasi bitwise dapat dilanjutkan.