2011-08-14 42 views
91

Tôi mới đến C# và không thể tìm thấy XNOR điều hành để cung cấp bảng chân lý này:Có XNOR (logic điều kiện) điều hành trong C#?

 
a b a XNOR b 
---------------- 
T T  T 
T F  F 
F T  F 
F F  T 

Có một nhà điều hành cụ thể cho việc này? Hoặc tôi cần phải sử dụng! (A^B)?

+66

Toán tử này thường được gọi là '==' cho toán hạng boolean ... –

+0

@Magnus Hoff: điểm rất hay! – sll

+14

Tôi nghĩ rằng cụm từ "không thể nhìn thấy gỗ cho cây" là rất thích hợp ở đây. Bỏ phiếu vì chúng tôi đã từng ở đây một hoặc hai lần;) – spender

Trả lời

169

XNOR đơn giản là bình đẳng trên các boolean; sử dụng A == B.

Đây là điều dễ dàng để bỏ lỡ, vì sự bình đẳng không thường được áp dụng cho các boolean. Và có những ngôn ngữ mà nó không nhất thiết phải hoạt động. Ví dụ, trong C, bất kỳ giá trị vô hướng nào khác không được coi là đúng, vì vậy hai giá trị "true" có thể không bằng nhau. Nhưng câu hỏi đã được gắn thẻ , trong đó có, chúng ta sẽ nói, booleans cư xử tốt.

Cũng lưu ý rằng điều này không khái quát hóa các hoạt động bitwise, nơi bạn muốn 0x1234 XNOR 0x5678 == 0xFFFFBBB3 (giả sử 32 bit). Để làm được điều đó, bạn cần phải xây dựng từ các hoạt động khác, như ~(A^B). (Lưu ý:. ~, không !)

+33

Tất nhiên rồi !! Tôi cảm thấy như ngu ngốc bây giờ -) – trailmax

+3

@trailmax: Không cần phải cảm thấy ngu ngốc, đó là một điều dễ dàng để bỏ lỡ. (Làm sạch các bình luận được tích hợp vào câu trả lời.) –

+4

Trong toán tử C, '!' Có thể được sử dụng để chuyển đổi các toán tử 'int' thành" well-behaved ":'! A ==! B'. –

2

Không, Bạn cần sử dụng !(A^B)

Mặc dù tôi giả sử bạn có thể sử dụng toán tử quá tải để làm XNOR của riêng bạn.

+1

Đây là bitwise, không phải là một hợp lý – sll

+0

Tôi nghĩ rằng các poster biết rằng như ông đã bao gồm nó trong câu hỏi của mình. – Griffin

+4

@sllev bạn gần như đã cho tôi, tôi đã phải kiểm tra lại nó.Trong C#^là logic nếu hoạt động trên boolean. Nếu hoạt động trên các loại tích phân, nó là bitwise. Vui lòng xem http://msdn.microsoft.com/en-us/library/zkacc7k1.aspx – trailmax

4

XOR = A hoặc B, nhưng không phải là một & B hay không (Không thể bằng [=!])
XNOR là do đó oppoiste chính xác, và có thể dễ dàng được biểu thị bằng == hoặc ===.

trường hợp Tuy nhiên, không boolean vấn đề hiện tại, như trong ví dụ này:

a = 5 
b = 1 

if (a == b){ 
... 
} 

thay vào đó, sử dụng này:

a = 5 
b = 1 

if((a && b) || (!a && !b)){ 
... 
} 

hoặc

if(!(a || b) && (a && b)){ 
... 
} 

ví dụ đầu tiên sẽ trở lại false (5! = 1), nhưng giá trị thứ hai sẽ trả về true (giá trị [value?] và b [value?] trả về cùng boolean , true (giá trị = không 0/có giá trị)

ví dụ alt chỉ là đảo ngược (a || b) & &! (một & & b) (XOR) cổng

-3

Bạn có thể sử dụng === điều hành cho XNOR. Chỉ cần bạn cần chuyển đổi ab thành bool.

if (!!a === !!b) {...} 
+0

chỉ C# không có toán tử '===' – trailmax

+0

không có câu trả lời nào là đúng, '===' toán tử không cưỡng chế là javascript và double '!!' trước một giá trị trong một đánh giá không hợp lệ trong C# hoặc – Remi

+0

như đã nêu, C# không có toán tử dấu bằng ba. – cramopy

Các vấn đề liên quan