Operator logis Boolean - AND, OR, NOT, XOR
Operator Boolean logis melakukan operasi logis dengan operand bool . Operator termasuk negasi logis unary (!
), logis biner AND (&
), OR (|
), dan eksklusif OR (^
), dan logis bersyarat biner AND (&&
) dan OR (||
).
- Operator unary
!
(negasi logis). - Operator biner
&
(AND LOGIS),|
(OR LOGIS), dan^
(OR eksklusif logis). Operator tersebut selalu mengevaluasi kedua operand. - Operator biner
&&
(logis kondisional AND) dan||
(OR logis kondisional). Operator tersebut mengevaluasi operan kanan hanya jika diperlukan.
Untuk operan tipe numerik integral , &
, |
, dan ^
operator melakukan operasi logika bitwise. Untuk informasi lebih lanjut, lihat Operator bitwise dan shift.
Operator negasi logis!
Operator awalan unary !
menghitung negasi logis dari operand-nya. Artinya, itu menghasilkan true
, jika operan mengevaluasi ke false
, dan false
, jika operan mengevaluasi ke true
:
bool passed = false;
Console.WriteLine(!passed); // output: True
Console.WriteLine(!true); // output: False
Operator postfix !
unary adalah operator null-forgiving.
Operator LOGIS AND &
Operator &
menghitung logika AND dari operandnya. Hasil dari x & y
adalah true
jika kedua x
dan y
mengevaluasi ke true
. Jika tidak, hasilnya adalah false
.
Operator &
selalu mengevaluasi kedua operan. Ketika operand sebelah kiri mengevaluasi ke false
, hasil operasi terlepas false
dari nilai operand sebelah kanan. Namun, bahkan saat itu, operan sebelah kanan dievaluasi.
Dalam contoh berikut, operand sisi kanan operator &
adalah panggilan metode, yang dilakukan terlepas dari nilai operand sebelah kiri:
bool SecondOperand()
{
Console.WriteLine("Second operand is evaluated.");
return true;
}
bool a = false & SecondOperand();
Console.WriteLine(a);
// Output:
// Second operand is evaluated.
// False
bool b = true & SecondOperand();
Console.WriteLine(b);
// Output:
// Second operand is evaluated.
// True
Operator AND logis bersyarat&&
juga menghitung logis AND dari operannya, tetapi tidak mengevaluasi operand tangan kanan jika operand sebelah kiri mengevaluasi ke false
.
Untuk operand dari jenis numerik integral, &
operator menghitung logis bitwise DAN operannya. Operator &
unary adalah alamat operator.
Operator OR eksklusif logis
Operator ^
menghitung OR eksklusif logis, juga dikenal sebagai XOR logis, dari operand-nya. Hasil dari x ^ y
adalah true
jika x
mengevaluasi kepada true
dan y
mengevaluasi ke false
, atau x
mengevaluasi kepada false
dan y
mengevaluasi kepada true
. Jika tidak, hasilnya adalah false
. Artinya, untuk operand bool
, operator ^
menghitung hasil yang sama dengan operator pertidaksamaan!=
.
Console.WriteLine(true ^ true); // output: False
Console.WriteLine(true ^ false); // output: True
Console.WriteLine(false ^ true); // output: True
Console.WriteLine(false ^ false); // output: False
Untuk operan dari jenis numerik integral, ^
operator menghitung eksklusif logis bitwise ATAU operannya.
Operator OR logis |
Operator |
menghitung OR logis dari operand-nya. Hasil dari x | y
adalah true
jika salah satu x
atau y
bernilai true
. Jika tidak, hasilnya adalah false
.
Operator |
selalu mengevaluasi kedua operan. Ketika operand sebelah kiri mengevaluasi ke true
, hasil operasi terlepas true
dari nilai operand sebelah kanan. Namun, bahkan saat itu, operan sebelah kanan dievaluasi.
Dalam contoh berikut, operand sisi kanan operator |
adalah panggilan metode, yang dilakukan terlepas dari nilai operand sebelah kiri:
bool SecondOperand()
{
Console.WriteLine("Second operand is evaluated.");
return true;
}
bool a = true | SecondOperand();
Console.WriteLine(a);
// Output:
// Second operand is evaluated.
// True
bool b = false | SecondOperand();
Console.WriteLine(b);
// Output:
// Second operand is evaluated.
// True
Operator AND logis bersyarat||
juga menghitung logis AND dari operannya, tetapi tidak mengevaluasi operand tangan kanan jika operand sebelah kiri mengevaluasi ke true
.
Untuk operand dari jenis numerik integral, |
operator menghitung logis bitwise DAN operand-nya.
Operator DAN logis kondisional &
Operator &&
AND logis bersyarat, juga dikenal sebagai operator AND logis "short-circuiting", menghitung logis AND dari operandnya. Hasil dari x && y
adalah true
jika kedua x
dan y
mengevaluasi ke true
. Jika tidak, hasilnya adalah false
. Jika x
dievaluasi ke false
, y
tidak dievaluasi.
Dalam contoh berikut, operand &&
kanan operator adalah panggilan metode, yang dilakukan terlepas dari nilai operand sebelah kirifalse
:
bool SecondOperand()
{
Console.WriteLine("Second operand is evaluated.");
return true;
}
bool a = false && SecondOperand();
Console.WriteLine(a);
// Output:
// False
bool b = true && SecondOperand();
Console.WriteLine(b);
// Output:
// Second operand is evaluated.
// True
Operator AND&
logis juga menghitung logis AND dari operandnya, tetapi selalu mengevaluasi kedua operand.
Logika bersyarat OR operator ||
Operator OR logis bersyarat ||
, juga dikenal sebagai operator OR logis "hubungan arus pendek", menghitung OR logis dari operan-operannya. Hasil dari x || y
adalah true
jika salah satu x
atau y
bernilai true
. Jika tidak, hasilnya adalah false
. Jika x
dievaluasi ke true
, y
tidak dievaluasi.
Dalam contoh berikut, operand ||
kanan operator adalah panggilan metode, yang dilakukan terlepas dari nilai operand sebelah kiritrue
:
bool SecondOperand()
{
Console.WriteLine("Second operand is evaluated.");
return true;
}
bool a = true || SecondOperand();
Console.WriteLine(a);
// Output:
// True
bool b = false || SecondOperand();
Console.WriteLine(b);
// Output:
// Second operand is evaluated.
// True
Operator AND|
logis juga menghitung logis AND dari operandnya, tetapi selalu mengevaluasi kedua operand.
Operator logika Boolean Nullable
Untuk bool?
operand, &
operator (logical AND) dan |
(logical OR) mendukung logika tiga nilai sebagai berikut:
Operator
&
hanya menghasilkantrue
jika kedua operandnya dievaluasi ketrue
. Jika salah satux
atauy
mengevaluasi kefalse
,x & y
menghasilkanfalse
(bahkan jika operand lain mengevaluasi kenull
). Jika tidak, hasil darix & y
adalahnull
.Operator
|
hanya menghasilkanfalse
jika kedua operandnya dievaluasi kefalse
. Jika salah satux
atauy
mengevaluasi ketrue
,x | y
menghasilkantrue
(bahkan jika operand lain mengevaluasi kenull
). Jika tidak, hasil darix | y
adalahnull
.
Tabel berikut menyajikan semantik tersebut:
x | y | x&y | x\y |
---|---|---|---|
benar | benar | benar | benar |
benar | salah | salah | benar |
benar | null | null | benar |
salah | benar | salah | benar |
salah | salah | salah | salah |
salah | nihil | salah | null |
null | benar | nihil | benar |
nihil | salah | salah | null |
null | null | null | null |
Perilaku operator tersebut berbeda dari perilaku operator biasa dengan tipe nilai nullable. Biasanya, operator yang didefinisikan untuk operan dari jenis nilai juga dapat digunakan dengan operan dari jenis nilai nullable yang sesuai. Operator semacam itu menghasilkan null
jika salah satu operandnya mengevaluasi ke null
. Namun, operator &
dan |
bisa menghasilkan non-null bahkan jika salah satu operand mengevaluasi ke null
. Untuk informasi selengkapnya tentang perilaku operator dengan jenis nilai yang bisa diubah ke null, lihat bagian Operator yang diangkat dari artikel Jenis nilai yang bisa diubah ke null.
Anda juga bisa menggunakan !
operator dan ^
dengan bool?
operand, seperti yang ditunjukkan contoh berikut:
bool? test = null;
Display(!test); // output: null
Display(test ^ false); // output: null
Display(test ^ null); // output: null
Display(true ^ null); // output: null
void Display(bool? b) => Console.WriteLine(b is null ? "null" : b.Value.ToString());
Operator logis kondisional &&
dan ||
tidak mendukung bool?
operand.
Penetapan campuran
Untuk op
operator biner, ekspresi penetapan campuran dari formulir
x op= y
setara dengan:
x = x op y
kecuali x
hanya dievaluasi sekali.
Operator &
, |
, dan ^
mendukung penetapan campuran, seperti yang ditunjukkan oleh contoh berikut:
bool test = true;
test &= false;
Console.WriteLine(test); // output: False
test |= true;
Console.WriteLine(test); // output: True
test ^= false;
Console.WriteLine(test); // output: True
Catatan
Operator &&
logis kondisional dan ||
tidak mendukung penetapan mabung.
Prioritas operator
Daftar berikut ini mengurutkan operator aritmetika mulai dari prioritas tertinggi hingga terendah:
- Operator logika negasi:
!
- Operator AND logis
&
- Operator OR eksklusif logis
^
- Operator OR logis
|
- Operator AND logis kondisional
&&
- Operator AND logis kondisional
||
Gunakan tanda kurung ()
, untuk mengubah urutan evaluasi yang diberlakukan oleh prioritas operator:
Console.WriteLine(true | true & false); // output: True
Console.WriteLine((true | true) & false); // output: False
bool Operand(string name, bool value)
{
Console.WriteLine($"Operand {name} is evaluated.");
return value;
}
var byDefaultPrecedence = Operand("A", true) || Operand("B", true) && Operand("C", false);
Console.WriteLine(byDefaultPrecedence);
// Output:
// Operand A is evaluated.
// True
var changedOrder = (Operand("A", true) || Operand("B", true)) && Operand("C", false);
Console.WriteLine(changedOrder);
// Output:
// Operand A is evaluated.
// Operand C is evaluated.
// False
Untuk daftar lengkap operator C# yang diurutkan berdasarkan tingkat prioritas, lihat bagian Prioritas operator dari artikel operator C#.
Kelebihan beban operator
Tipe yang ditentukan pengguna dapat membebani operator !
, &
, |
, dan operator ^
. JIka operator biner kelebihan beban, operator penetapan campuran yang sesuai juga secara implisit kelebihan beban. Jenis yang ditentukan pengguna tidak dapat secara eksplisit membebani operator penetapan majemuk.
Jenis yang ditentukan pengguna tidak dapat membebani operator &&
logis kondisional dan ||
. Namun, jika jenis yang ditentukan pengguna membebani operator benar dan salah dan &
operator atau |
dengan cara tertentu, &&
operasi atau ||
, masing-masing, bisa dievaluasi untuk operand jenis tersebut. Untuk informasi selengkapnya, lihat bagian Operator logis kondisional yang ditentukan pengguna dari bagian spesifikasi bahasa C#.
Spesifikasi bahasa C#
Untuk informasi selengkapnya, lihat bagian berikut dari spesifikasi bahasa C#:
Lihat juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk