उचित मैनुअल तार्किक XOR कार्यान्वयन इस बात पर निर्भर करता है कि आप अपने XOR के साथ अन्य तार्किक ऑपरेटरों ( ||
और &&
) के सामान्य व्यवहार की कितनी बारीकी से नकल करना चाहते हैं । इन ऑपरेटरों के बारे में दो महत्वपूर्ण बातें हैं: 1) वे शॉर्ट-सर्किट मूल्यांकन की गारंटी देते हैं, 2) वे एक अनुक्रम बिंदु पेश करते हैं, 3) वे केवल एक बार अपने ऑपरेंड का मूल्यांकन करते हैं।
XOR मूल्यांकन, जैसा कि आप समझते हैं, शॉर्ट-सर्कुलेट नहीं किया जा सकता क्योंकि परिणाम हमेशा दोनों ऑपरेंड पर निर्भर करता है। तो 1 प्रश्न से बाहर है। लेकिन 2 के बारे में क्या? यदि आप 2 के बारे में परवाह नहीं करते हैं, तो परिणाम के संदर्भ में सामान्यीकृत (यानी bool
) मान ऑपरेटर !=
XOR का काम करता है। और !
यदि आवश्यक हो, तो संचालन को आसानी से एकरी से सामान्य किया जा सकता है। इस प्रकार !A != !B
उस संबंध में उचित XOR को लागू करता है।
लेकिन अगर आप अतिरिक्त अनुक्रम बिंदु के बारे में परवाह करते हैं, तो !=
न तो और न ही बिटकॉइन ^
XOR को लागू करने का उचित तरीका है। एक्सओआर (ए, बी) करने का एक संभावित तरीका सही रूप में निम्नानुसार लग सकता है
a ? !b : b
यह वास्तव में उतना ही करीब है जितना कि आप एक होममेड XOR को " ||
और " के समान बना सकते हैं &&
। यह केवल तभी काम करेगा, जब आप अपने XOR को मैक्रो के रूप में लागू करेंगे। एक फ़ंक्शन नहीं करेगा, क्योंकि अनुक्रमण फ़ंक्शन के तर्कों पर लागू नहीं होगा।
हालांकि, कोई कह सकता है कि प्रत्येक पर अनुक्रम बिंदु होने का एकमात्र कारण &&
और ||
शॉर्ट-सर्कुलेटेड मूल्यांकन का समर्थन करना है, और इस प्रकार XOR को एक की आवश्यकता नहीं है। यह वास्तव में समझ में आता है। फिर भी, यह बीच में एक अनुक्रम बिंदु के साथ XOR होने पर विचार करने के लायक है। उदाहरण के लिए, निम्नलिखित अभिव्यक्ति
++x > 1 && x < 5
सी / सी ++ में व्यवहार और विशिष्ट परिणाम को परिभाषित किया है (कम से कम अनुक्रमण के संबंध में)। इसलिए, उपयोगकर्ता यथोचित तार्किक XOR से समान रूप से उम्मीद कर सकता है
XOR(++x > 1, x < 5)
जबकि !=
एक्स-आधारित एक्सओआर के पास यह संपत्ति नहीं है।