क्या C # में XNOR (Logical biconditional) ऑपरेटर है?


136

मैं C # में नया हूं और इस सत्य तालिका को प्रदान करने के लिए XNOR संचालक नहीं मिला :

aba XNOR b
----------------
TTT
TFF
एफटीएफ
FFT

क्या इसके लिए कोई विशिष्ट ऑपरेटर है? या मुझे उपयोग करने की आवश्यकता है? (ए ^ बी)?


94
यह ऑपरेटर आमतौर पर ==बूलियन ऑपरेंड्स के लिए जाना जाता है ...
मैग्नस हॉफ

@ मैग्नस हॉफ: बहुत अच्छी बात है!
SLL

24
मुझे लगता है कि वाक्यांश "पेड़ों के लिए लकड़ी नहीं देख सकता है" यहां बहुत उपयुक्त है। ऊपर मतदान क्योंकि हम सब यहाँ किया गया है एक या दो बार;)
खर्चा

1
हो सकता है कि ओपी iz l33t k! D जो भयानक शेलकोड को लिखना चाहते हैं और किसी भी तरह से तुलना ऑपरेशन को छिपाने की जरूरत है। यह एक संभावना है ...
केरेक एसबी

4
क्षमा करें, केरेक, मैं उस भीड़ से नहीं हूं। और
स्पेंडर

जवाबों:


250

XNOR बस बूलियंस पर समानता है; उपयोग करें A == B

यह याद करने के लिए एक आसान बात है, क्योंकि समानता आमतौर पर बूलियन पर लागू नहीं होती है। और ऐसी भाषाएँ भी हैं जहाँ यह आवश्यक रूप से काम नहीं करेगा। उदाहरण के लिए, सी में, किसी भी गैर-शून्य स्केलर मान को सही माना जाता है, इसलिए दो "सही" मान असमान हो सकते हैं। लेकिन सवाल टैग किया गया था, जो हमारे पास है, अच्छी तरह से व्यवहार किए गए बूलियन कहेंगे।

ध्यान दें कि यह बिटवाइज़ ऑपरेशंस के लिए सामान्य नहीं है, जहाँ आप चाहते हैं 0x1234 XNOR 0x5678 == 0xFFFFBBB3(32 बिट्स मानकर)। उसके लिए, आपको अन्य कार्यों से निर्माण करने की आवश्यकता है, जैसे ~(A^B)। (नोट: ~नहीं !)


6
सी में, !ऑपरेटर intको "अच्छी तरह से व्यवहार करने वाले" बूलियन में परिवर्तित करने के लिए इस्तेमाल किया जा सकता है !a==!b:।
ivan_pozdeev 14

2
@ivan_pozdeev और !!(कि दो तार्किक "नहीं" ऑपरेटरों है) के लिए किसी भी अदिश मूल्य को सामान्य 0या 1
कीथ थॉम्पसन

5

XOR = A या B, लेकिन A & B या न तो (बराबर नहीं हो सकता! [!])
XNOR इसलिए सटीक oppoiste है, और इसे आसानी से == या === द्वारा दर्शाया जा सकता है।

हालांकि, गैर-बूलियन मामले इस उदाहरण में समस्याएं पेश करते हैं:

a = 5
b = 1

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

इसके बजाय, इसका उपयोग करें:

a = 5
b = 1

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

या

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

पहला उदाहरण गलत (5! = 1) वापस आएगा, लेकिन दूसरा सच लौटा देगा (एक [मूल्य?] और बी [मूल्य?] के मूल्य एक ही बूलियन लौटाते हैं, सही (मान = नहीं 0 / एक मान है) )

पूरी मिसाल सिर्फ उलट (a || b) &&! (a && b) (XOR) गेट की है


3

नहीं, आपको उपयोग करने की आवश्यकता है !(A^B)

हालांकि मुझे लगता है कि आप अपने खुद के XNOR बनाने के लिए ऑपरेटर ओवरलोडिंग का उपयोग कर सकते हैं।


1
यह बिटवाइज़ है, लॉजिकल नहीं
sll

मुझे लगता है कि पोस्टर को पता है कि जैसा कि उन्होंने इसे अपने प्रश्न में शामिल किया है।
ग्रिफिन

4
@ यदि आप मुझे लगभग मिल गए, तो मुझे इसकी दोहरी जांच करनी पड़ी। बूलियन पर संचालित होने पर C # ^ तार्किक है। यदि अभिन्न प्रकारों पर संचालित किया जाता है, तो यह बिटवाइज़ है। कृपया msdn.microsoft.com/en-us/library/zkacc7k1.aspx
trailmax

@trailmax: शांत सामान, इस पर इशारा करने के लिए धन्यवाद! वास्तव में शैतान विस्तार में है!
SLL

-6

आप ===XNOR के लिए ऑपरेटर का उपयोग कर सकते हैं । बस आपको कन्वर्ट करने aऔर bबूल करने की आवश्यकता है ।

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

1
केवल C # में ===ऑपरेटर नहीं है
Trailmax

इस उत्तर में से कोई भी सही नहीं है, ===गैर-संचालक ऑपरेटर जावास्क्रिप्ट है और !!मूल्यांकन में एक मूल्य से पहले डबल c # या में मान्य नहीं है
रेमी

जैसा कि पहले ही कहा जा चुका है, c # में समान बराबर साइन ऑपरेटर नहीं है।
cramopy

=== C # में ओपेराट नहीं है ... (===) का प्रयोग जावास्क्रिप्ट है।
डार्ककोडर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.