2009-04-30 15 views
6

कुछ सीएस में किसी भी द्वितीय जवाब देने में सक्षम होना चाहिए की जगह, लेकिन मैं इसे चारों ओर मेरे सिर लपेटो नहीं कर पा रहे ...थोड़ा रेंज

मैं बिट्स का एक सेट है, और मैं कुछ बदलने की आवश्यकता एक अलग सेट के साथ बिट्स का। एक सरल उदाहरण में:

10101010 -original बिट सेट

00001111 -mask दिखा प्रतिस्थापन पदों

00001100 -नया बिट को महत्व देता

10101100 -resulting बिट सेट

एक और उदाहरण:

10101010 - मूल बिट सेट

00,110,011 -mask

11111111 -नया बिट

10111011 -resulting बिट सेट

यह बिट्स भर में दोहराने के द्वारा ऐसा करने के लिए तुच्छ है महत्व देता है।

क्या यह बूलियन तर्क (AND, OR, आदि) का उपयोग करके ऐसा करना संभव है?

उत्तर

10
result = (original & ~mask) | (newbits & mask) 

"& ~ मुखौटा" भाग से पहले 0 के उन बिट्स को साफ करें | अंश।

"& मुखौटा" भाग सुनिश्चित करें कि केवल नए बिट्स में उचित बिट्स का उपयोग किया जाता है।

+0

यह मिल गया है, धन्यवाद। –

0

बिट्स को मूल से बाहर निकालने के लिए मास्क आउट करें (मास्क की नॉट के साथ एंडिंग द्वारा), फिर नई बिट्स को (OR के माध्यम से) में रखें।

10101010 -original बिट सेट

00001111 -mask प्रतिस्थापन पदों दिखा

00001100 -नया बिट मूल्यों

11110000 -negated मुखौटा

10100000 -original bitset नकाबपोश

10101100 -न्यू बिट्स

में वापस रखे

सी (++) कोड में, यह होगा:

बाहर

= (& में ~ मुखौटा) | newbits;

यदि न्यूबिट में उन चीज़ों के बाहर बिट्स होते हैं जिन्हें वे प्रतिस्थापित करना चाहते हैं, और उन्हें मास्क के साथ भी।

1

(नया और एमएएसके) या (पुराना और नहीं मास्क)

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