Я новачок у C # і не зміг знайти оператора XNOR для надання цієї таблиці істинності:
аба XNOR b ---------------- TTT TFF FTF FFT
Чи є для цього конкретний оператор? Або мені потрібно використовувати! (A ^ B)?
Я новачок у C # і не зміг знайти оператора XNOR для надання цієї таблиці істинності:
аба XNOR b ---------------- TTT TFF FTF FFT
Чи є для цього конкретний оператор? Або мені потрібно використовувати! (A ^ B)?
Відповіді:
XNOR - це просто рівність булевих; використання A == B
.
Це легко пропустити, оскільки рівність зазвичай не застосовується до булів. І є мови, де це не обов'язково працює. Наприклад, у С будь-яке ненульове скалярне значення трактується як істинне, тому два "справжні" значення можуть бути нерівними. Але питання було позначене тегамиc #, що має, скажемо так, добре сприйняті буліни.
Зауважте також, що це не узагальнюється для бітових операцій там, де ви хочете 0x1234 XNOR 0x5678 == 0xFFFFBBB3
(припускаючи 32 біта). Для цього вам потрібно нарощувати інші операції, наприклад ~(A^B)
. (Примітка:, ~
ні !
.)
!
оператор може бути використано для перетворення int
«з до" добре себе "булева: !a==!b
.
!!
(це два логічні оператори "не") нормалізує будь-яке скалярне значення до 0
або 1
.
XOR = A або B, але не A & B або ні (не може бути рівним [! =])
XNOR, таким чином, є точним опозиціонером, і його можна легко представити == або ===.
Однак випадки, що не булева, представляють проблеми, як у цьому прикладі:
a = 5
b = 1
if (a == b){
...
}
замість цього скористайтеся цим:
a = 5
b = 1
if((a && b) || (!a && !b)){
...
}
або
if(!(a || b) && (a && b)){
...
}
перший приклад поверне помилковий (5! = 1), але другий поверне значення true (значення [value?] і b [value?] повернуть те саме булеве, true (значення = не 0 / є значення )
приклад alt - це просто зворотний (a || b) &&! (a&& b) (XOR) ворота
Ні, Вам потрібно скористатися !(A^B)
Хоча я вважаю, що ви можете використовувати перевантаження оператора, щоб зробити свій власний XNOR.
Ви можете використовувати ===
оператор для XNOR. Просто вам потрібно конвертувати a
і b
bool.
if (!!a === !!b) {...}
===
оператора
===
непримусовий оператор - це javascript, а подвійне !!
перед значенням в оцінці недійсне в c #
==
булеві операнди ...