2009-08-14 18 views
34

संभव डुप्लिकेट:
A clear, layman’s explanation of the difference between | and || in c# ?के बीच अंतर | और || या & और && तुलना के लिए

क्या के साथ तुलना के बीच अंतर है | और || या & और & & सी # और जावास्क्रिप्ट में?

उदाहरण:

if(test == test1 | test1 == test2) or if(test == test1 || test1 == test2) 
if(test == test1 & test1 == test2) or if(test == test1 && test1 == test2) 
+0

कौन सी भाषा? –

+0

आप किस भाषा का जिक्र कर रहे हैं? –

+1

सी # और जावास्क्रिप्ट –

उत्तर

30
सी (और अन्य भाषाओं शायद) में

एक भी | या & एक बिटवाइज़ तुलना है।
डबल || या && एक तार्किक तुलना है।
संपादित करें: के बाद से true अक्सर 1 के बराबर है और false अक्सर, बिटवाइज़ तुलना कभी कभी मान्य हो सकता है 0 के बराबर है और,

व्यवहार में "लघु-सर्किटिंग के बिना" के बारे में नीचे Mehrdad की टिप्पणी पढ़ लें बिल्कुल वही परिणाम वापस लौटें।

एक बार एक मिशन महत्वपूर्ण सॉफ्टवेयर घटक था, मैंने एक स्थिर कोड विश्लेषक चलाया और यह इंगित किया कि थोड़ा सा तुलनात्मक रूप से तुलना की जा रही थी जहां एक तार्किक तुलना होनी चाहिए। चूंकि यह सी में लिखा गया था और तार्किक तुलना की व्यवस्था के कारण, सॉफ्टवेयर ने या तो ठीक काम किया था। उदाहरण:

if ((altitide > 10000) & (knots > 100)) 
... 
+22

सी # (जो दृढ़ता से टाइप की गई भाषा है) का उपयोग कर | और बुलियन वैरिएबल पर "तार्किक या/और w/o शॉर्ट-सर्किटिंग" का परिणाम होगा। –

+0

वाह, वास्तव में? यह दिलचस्प है और मुझे सी # के बारे में और जानना होगा। मैं आपकी टिप्पणी को इंगित करने के लिए उत्तर अपडेट कर दूंगा। – dustmachine

+0

मेहरद की टिप्पणी वास्तव में सी # के लिए अद्वितीय नहीं है - कई (सबसे?) दृढ़ता से टाइप की गई भाषाओं में यह भेद है। मुझे पता है कि यह जावा और सी ++ में मौजूद है, और मुझे लगता है कि यह सी में मौजूद है, उदाहरण के लिए। –

8

& और | जबकि बाइनरी ऑपरेटर हैं || और & & बूलियन हैं।

बड़ा अंतर:
(1 & 2) 0 है, झूठी
(1 & & 2) सच

+3

(1 और 2) में ऐसी गारंटी नहीं देते हैं वैध सी # वाक्यविन्यास मान्य नहीं है। –

+4

मूल प्रश्न में सी # का उल्लेख नहीं किया गया था। इसे बाद में संपादित किया गया था। – David

1

उदाहरण है, जिसमें आप एक ही चरित्र का उपयोग कर रहे है (यानी | या &) परिणामों की थोड़ी सी तुलना है। जब तक आपकी भाषा इन अभिव्यक्तियों को बाइनरी मान पर मूल्यांकन करती है, तब तक उन्हें एक ही परिणाम वापस करना चाहिए। एक सर्वोत्तम अभ्यास के रूप में, हालांकि, आपको तार्किक ऑपरेटर का उपयोग करना चाहिए जैसा कि आपका मतलब है (मुझे लगता है)।

3

(यह मानते हुए सी, सी ++, जावा, जावास्क्रिप्ट)

| और & बिटवाइज़ ऑपरेटर्स जबकि || और && तार्किक ऑपरेटरों रहे हैं। आमतौर पर आप || और && का उपयोग बयान और लूप और ऐसे (यानी उपर्युक्त उदाहरणों के लिए) के लिए करना चाहते हैं। Bitwise ऑपरेटरों बिटमैस्क के भीतर बिट्स की स्थापना और जांच के लिए हैं।

28

& और | बिटवाई ऑपरेटर हैं जो पूर्णांक और बूलियन तर्क दोनों पर काम कर सकते हैं, और & & और || लॉजिकल ऑपरेटर हैं जो केवल बूलियन तर्कों पर ही काम कर सकते हैं। कई भाषाओं में, यदि दोनों तर्क बुलीयन हैं, तो मुख्य अंतर यह है कि लॉजिकल ऑपरेटर शॉर्ट सर्किट मूल्यांकन करेंगे और दूसरे तर्क का मूल्यांकन नहीं करेंगे यदि पहला तर्क उत्तर निर्धारित करने के लिए पर्याप्त है (उदा।& & के मामले में, यदि पहला तर्क गलत है, तो दूसरा तर्क अप्रासंगिक है)।

+5

बूलियन ऑपरेटर की छोटी सर्किटिंग का उल्लेख करने के लिए पहले होने के लिए अपवोट – David

0

& और | आमतौर पर bitwise संचालन होते हैं।

जहां & & और || आमतौर पर तार्किक संचालन होते हैं।

तुलनात्मक उद्देश्यों के लिए, यह पूरी तरह ठीक है बशर्ते कि सबकुछ या तो 1 या 0 देता है। अन्यथा, यह झूठी सकारात्मक वापसी कर सकता है। बग पढ़ने के लिए कड़ी मेहनत रोकने के लिए आपको इससे बचना चाहिए।

संबंधित मुद्दे