Jestem nowy w C # i nie mogę znaleźć operatora XNOR , aby podać tę tabelę prawdy:
aba XNOR b ---------------- TTT TFF FTF FFT
Czy jest do tego konkretny operator? Albo muszę użyć! (A ^ B)?
Jestem nowy w C # i nie mogę znaleźć operatora XNOR , aby podać tę tabelę prawdy:
aba XNOR b ---------------- TTT TFF FTF FFT
Czy jest do tego konkretny operator? Albo muszę użyć! (A ^ B)?
Odpowiedzi:
XNOR to po prostu równość wartości logicznych; używać A == B
.
Łatwo to przeoczyć, ponieważ równość nie jest powszechnie stosowana do wartości logicznych. Są języki, w których to niekoniecznie będzie działać. Na przykład w języku C każda niezerowa wartość skalarna jest traktowana jako prawda, więc dwie „prawdziwe” wartości mogą być nierówne. Ale pytanie zostało oznaczonedo#, która ma, powiedzmy, grzeczne wartości logiczne.
Zauważ również, że nie jest to uogólnione na operacje bitowe, gdzie chcesz 0x1234 XNOR 0x5678 == 0xFFFFBBB3
(zakładając 32 bity). W tym celu musisz wykorzystać inne operacje, takie jak ~(A^B)
. (Uwaga: ~
nie !
.)
!
operator może użyć do przeprowadzenia int
„S«do dobrze zachowujących»logicznych: !a==!b
.
!!
(to dwa logiczne operatory „nie”) normalizuje dowolną wartość skalarną do 0
lub 1
.
XOR = A lub B, ale nie A i B lub żadne (nie może być równe [! =])
XNOR jest zatem dokładnym przeciwieństwem i można go łatwo przedstawić za pomocą == lub ===.
Jednak przypadki inne niż boolowskie stwarzają problemy, jak w tym przykładzie:
a = 5
b = 1
if (a == b){
...
}
zamiast tego użyj tego:
a = 5
b = 1
if((a && b) || (!a && !b)){
...
}
lub
if(!(a || b) && (a && b)){
...
}
pierwszy przykład zwróci fałsz (5! = 1), ale drugi zwróci prawdę (wartości a [wartość?] i b [wartość?] zwracają tę samą wartość logiczną, prawda (wartość = nie 0 / istnieje wartość )
przykład alt jest po prostu odwróconą bramką (a || b) &&! (a && b) (XOR)
Nie, musisz użyć !(A^B)
Chociaż przypuszczam, że możesz użyć przeciążenia operatorów, aby stworzyć własny XNOR.
Możesz użyć ===
operatora dla XNOR. Wystarczy przekonwertować a
i b
bool.
if (!!a === !!b) {...}
===
operatora
===
operatorem bez przymusu jest javascript, a podwójna !!
wartość przed wartością w ocenie nie jest poprawna w c #
==
operandy boolowskie ...