Saya baru mengenal C # dan tidak dapat menemukan operator XNOR untuk menyediakan tabel kebenaran ini:
aba XNOR b ---------------- TTT TFF FTF FFT
Apakah ada operator khusus untuk ini? Atau saya perlu menggunakan! (A ^ B)?
Saya baru mengenal C # dan tidak dapat menemukan operator XNOR untuk menyediakan tabel kebenaran ini:
aba XNOR b ---------------- TTT TFF FTF FFT
Apakah ada operator khusus untuk ini? Atau saya perlu menggunakan! (A ^ B)?
Jawaban:
XNOR hanyalah persamaan pada boolean; gunakan A == B
.
Ini adalah hal yang mudah untuk dilewatkan, karena kesetaraan tidak umum diterapkan pada boolean. Dan ada bahasa di mana itu tidak selalu berhasil. Misalnya, dalam C, nilai skalar non-nol dianggap benar, sehingga dua nilai "benar" bisa tidak sama. Tapi pertanyaannya sudah ditandaic #, yang telah, harus kita katakan, para boolean berperilaku baik.
Perhatikan juga bahwa ini tidak menggeneralisasi ke operasi bitwise, di mana Anda inginkan 0x1234 XNOR 0x5678 == 0xFFFFBBB3
(dengan asumsi 32 bit). Untuk itu, Anda perlu membangun dari operasi lain, seperti ~(A^B)
. (Catatan:, ~
bukan !
.)
!
operator dapat digunakan untuk mengkonversi int
's untuk 'berperilaku baik' boolean: !a==!b
.
!!
(itu dua operator "bukan" yang logis) menormalkan nilai skalar apa pun ke 0
atau 1
.
XOR = A atau B, tetapi Bukan A & B atau keduanya (Tidak bisa sama dengan [! =])
Karena itu XNOR adalah oposisi yang tepat, dan dapat dengan mudah diwakili oleh == atau ===.
Namun, kasus non-boolean menimbulkan masalah, seperti dalam contoh ini:
a = 5
b = 1
if (a == b){
...
}
alih-alih, gunakan ini:
a = 5
b = 1
if((a && b) || (!a && !b)){
...
}
atau
if(!(a || b) && (a && b)){
...
}
contoh pertama akan mengembalikan false (5! = 1), tetapi yang kedua akan mengembalikan true (nilai []? )
contoh alt hanyalah gerbang yang dibalik (a || b) &&! (a && b) (XOR)
Tidak, Anda harus menggunakan !(A^B)
Meskipun saya kira Anda bisa menggunakan overloading operator untuk membuat XNOR Anda sendiri.
Anda dapat menggunakan ===
operator untuk XNOR. Hanya Anda perlu mengkonversi a
dan b
menjadi bool.
if (!!a === !!b) {...}
===
operator
===
operator non-koersif adalah javascript dan dobel !!
sebelum nilai dalam evaluasi tidak valid dalam c # baik
==
operan boolean ...