दो पूर्णांक एक्स और वाई को देखते हुए, मैं पी से पी + एन पर बिट्स को ओवरराइट करना चाहता हूं।एक सामान्य तरीके से बिट्स की एक श्रृंखला को ओवरराइट करना
उदाहरण:
int x = 0xAAAA; // 0b1010101010101010
int y = 0x0C30; // 0b0000110000110000
int result = 0xAC3A; // 0b1010110000111010
इस प्रक्रिया एक नाम है?
अगर मैं मास्क है, आपरेशन आसान पर्याप्त है:
int mask_x = 0xF00F; // 0b1111000000001111
int mask_y = 0x0FF0; // 0b0000111111110000
int result = (x & mask_x) | (y & mask_y);
क्या मैं काफी समझ नहीं कैसे इस तरह के निम्नलिखित सामान्य सी ++ समारोह में के रूप में एक सामान्य तरीके से यह लिखने के लिए, यह है:
template<typename IntType>
IntType OverwriteBits(IntType dst, IntType src, int pos, int len) {
// If:
// dst = 0xAAAA; // 0b1010101010101010
// src = 0x0C30; // 0b0000110000110000
// pos = 4 ^
// len = 8 ^-------
// Then:
// result = 0xAC3A; // 0b1010110000111010
}
समस्या यह है कि मैं यह नहीं समझ सकता कि मास्क को सही तरीके से कैसे बनाया जाए, जब पूर्णांक की चौड़ाई समेत सभी चर, परिवर्तनीय हैं।
क्या कोई जानता है कि उपरोक्त फ़ंक्शन को सही तरीके से कैसे लिखना है?
क्या आपको एक विशेष मामले की आवश्यकता है जब आप पूरे स्ट्रिंग को मास्क कर रहे हों? जैसा कि उस मामले में 1 << लेन अधिक बह जाएगा। –
यह वास्तव में बह जाएगा, लेकिन यह अभी भी सही जवाब देगा। –