एक मुखौटा एक पूर्णांक मान के लिए एक सामान्य शब्द है जो बिट-वार एंडेड, ऑर्ड, एक्सओआरड, आदि एक और पूर्णांक मान के साथ है।
उदाहरण के लिए, यदि आप एक int चर के 8 कम से कम महत्वपूर्ण अंक निकालना चाहते हैं, तो आप variable & 0xFF
करते हैं। 0xFF एक मुखौटा है।
इसी तरह यदि आप बिट्स 0 और 8 सेट करना चाहते हैं, तो आप variable | 0x101
करते हैं, जहां 0x101 एक मुखौटा है।
या यदि आप एक ही बिट्स को उलटा करना चाहते हैं, तो आप variable^0x101
करते हैं, जहां 0x101 एक मुखौटा है।
अपने मामले के लिए एक मुखौटा उत्पन्न करने के लिए आपको सरल गणितीय तथ्य का फायदा उठाना चाहिए कि यदि आप अपने मुखौटा में 1 जोड़ते हैं (मास्क में इसकी सभी कम से कम महत्वपूर्ण बिट्स 1 और शेष 0 पर सेट होती हैं), तो आपको एक मान मिलता है 2.
की शक्ति है, इसलिए यदि आप 2 की सबसे नज़दीकी शक्ति उत्पन्न करते हैं, तो आप मास्क प्राप्त करने के लिए 1 से घटा सकते हैं।
2 के सकारात्मक शक्तियों आसानी से
सी
में बाईं पारी
<<
ऑपरेटर के साथ उत्पन्न कर रहे हैं इसलिए,
1 << n
पैदावार 2
n। बाइनरी में यह 10 ...0s के साथ है।
(1 << n) - 1
n
सबसे कम बिट्स 1.
करने के लिए सेट अब साथ एक मुखौटा का उत्पादन करेगा, आप बाईं पाली में अतिप्रवाह के लिए बाहर देखने की जरूरत है। सी (और सी ++ में) आप वैरिएबल के रूप में कई बिट पोजिशन द्वारा कानूनी रूप से बायीं तरफ स्थानांतरित नहीं कर सकते हैं, इसलिए यदि इनट्स 32-बिट हैं, 1<<32
परिणाम undefined behavior
में हैं। हस्ताक्षरित पूर्णांक ओवरफ़्लो से बचा जाना चाहिए, इसलिए आपको हस्ताक्षरित मानों का उपयोग करना चाहिए, उदा। 1u << 31
।
* एक मुखौटा है भी क्या * [कैसे विकिपीडिया के बारे में?] (http://en.wikipedia.org/wiki/Mask_? (कंप्यूटिंग)) – chris
0x2F रास्ते से गलत है, यह 0x3f – wich
@chris विकी बहुत भ्रम है ... – sebi