:
समारोह में, आप एक अपघटन कर सकता हूँ नहीं है, लेकिन अगर एक निर्दिष्ट बिट पर सेट किया जाता है की जाँच करें, बिटवाइज़ संयोजन का उपयोग कर
#define IS_ON 0x01
#define IS_LARGE 0x02
#define IS_RED 0x04
(या समतुल्य enums
या const int
मूल्यों, आप उन्हें कैसे करना चाहते हैं पर निर्भर करता है - मैं #define
का उपयोग किया है यह क्या मैं करने के लिए इस्तेमाल कर रहा हूँ है बस क्योंकि), आप कर सकते हैं के रूप में पास उन्हें:
funcname (IS_ON | IS_RED); // passes in 0x05
तो फिर तुम उनकी तरह कुछ के साथ निकालने :
void funcname (int bitmask) {
if ((bitmask & IS_ON) == IS_ON) { // 0x05 & 0x01 -> 0x01
// IS_ON bit is set.
}
:
}
एकल बिट विनिर्देशक के लिए, आप if (bitmask & IS_ON)
फार्म के साथ प्राप्त कर सकते हैं, लेकिन आप पूर्ण जांच की जरूरत है अपने विनिर्देशक बहु-बिट हो सकता है अगर मान (उदाहरण के लिए 0 से 7 के तीन-बिट वॉल्यूम स्तर की तरह)।
तुम भी तरह 'पूर्णांक param1and2 = 0x03 संख्या निर्धारित कर सकते हैं;' जो 'param1 की तरह काम करते | param2'; –
यह शायद ध्यान दिया जाना चाहिए कि '|' तर्क वापस बहाल करना केवल विशिष्ट तर्क पैटर्न के लिए संभव है, जैसे उत्तर में प्रस्तुत किए गए। अन्यथा यह संभव नहीं होगा: '3 | 4' '1 के समान है 6'। – Vlad
धन्यवाद दोस्तों! यही वह है जो मैंने किया है क्योंकि पक्सडीब्लो ने – DarkRoast