2009-12-12 20 views
5

)। मान लें कि आपके पास दो पूर्णांक हैं, एक = 8, बी = 2. सी ++ ए में बी सच है। मैंने झंडे के संग्रह के साथ काम करने के लिए उस व्यवहार का इस्तेमाल किया। उदाहरण के लिए झंडे 1, 2, 4, 8 और इतने पर होंगे, और उनमें से कोई भी संग्रह अद्वितीय होगा। मैं नहीं देख सकता कि सी # में, जैसा कि | और & ऑपरेटरों सी ++ में ऐसा व्यवहार नहीं करते हैं। मैंने सी # में ऑपरेटरों के बारे में प्रलेखन पढ़ा लेकिन मुझे अभी भी यह नहीं मिला है।बिटवाई या: सी # बनाम सी ++

संपादित करें:

दुर्भाग्य से, मैं कहीं ऊपर गंदगी बातें करने लगते हैं। उदाहरण के लिए इस कोड डालें:

byte flagCollection = 8; 
byte flag = 3; 

if ((flag | flagCollection) != 0) MessageBox.Show("y"); else MessageBox.Show("n"); 

यह रिटर्न "y" जो कुछ भी मूल्य के लिए मैं ध्वज में डाल दिया। जो स्पष्ट है, क्योंकि 3 | 8 होगा 11. हम्मम्म ... मैं जो करना चाहता हूं उसके पास ध्वज संग्रह है: 1, 2, 4, 8, 16 और जब मैं एक संख्या देता हूं, यह निर्धारित करने में सक्षम होने के लिए कि यह झंडे क्या है।

उत्तर

14

& और | सी # में ऑपरेटरों C/C के समान होते हैं ++। उदाहरण के लिए, 2 | 8 10 और 2 & 8 अंतर यह है कि एक int स्वचालित रूप से एक बूलियन मान की तरह व्यवहार नहीं किया जाता है 0.

है। int और bool सी # में विशिष्ट प्रकार हैं। bool प्राप्त करने के लिए आपको int से दूसरे int की तुलना करने की आवश्यकता है।

if (2 & 8) ...   // doesn't work 

if ((2 & 8) != 0) ... // works 
+0

किसी के पास इसका उदाहरण है? –

+0

'int' को सी ++ में 'से' बूल 'में परिवर्तित नहीं किया गया है, प्रति से, क्योंकि कोई' बूल 'प्रकार नहीं है -' int 'का उपयोग' बूल 'के रूप में किया जाता है। – Noldorin

+6

@ नोल्डोरिन: ऐसा नहीं - सी (सी 99 से पहले) में एक बूल प्रकार नहीं था, और एक समय में (मानकीकरण से पहले) सी ++ या तो नहीं था, लेकिन सी के पास बूल (तकनीकी रूप से इसका नाम _Bool) था दशक, और सी ++ में यह और भी लंबा रहा है। –

8

यह बिटवाई और/या ऑपरेटर नहीं है जो सी # में अलग हैं। वे सी ++ में लगभग समान काम करते हैं। अंतर यह है कि सी # में पूर्णांक से एक बुलियन तक एक अंतर्निहित रूपांतरण नहीं है।

आपकी समस्या को ठीक करने के लिए आप सिर्फ शून्य करने के लिए तुलना करने की आवश्यकता:

if ((a | b) != 0) { 
    ... 
5

सी/सी ++ के विपरीत, सी # अंकगणित और बूलियन संचालन के बीच एक सुंदर सख्त अलगाव बनाए रखता है।

सी # के डिजाइनरों ने अभिन्न प्रकारों के स्वचालित रूपांतरण को बुलियन के रूप में स्वचालित रूप से त्रुटियों का स्रोत माना है, जो कि उनके पास सी # नहीं था, इसलिए आपको स्पष्ट रूप से अपने अंकगणितीय परिणाम को बुलियन परिणाम में प्रस्तुत करना होगा तुलना:

if ((a | b) != 0) { 
    // ... 
} 

मुझे लगता है कि यह शायद एक बुरा विचार नहीं है सी/सी में ऐसा करने ++ के साथ-साथ, लेकिन मैं मानता हूँ कि मैं निश्चित रूप से सख्ती से कि सलाह का पालन नहीं है (और मैं के लिए बहस नहीं होता यह बहुत मुश्किल है)।

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