2012-03-15 16 views
5

मैं एक मशीन सिमुलेशन प्रोग्राम पर काम कर रहा हूं। मुझे मुख्य मेमोरी के लिए बिट्ससेट का वेक्टर मिला है, ताकि मैं किसी भी विशिष्ट "शब्द" तक पहुंचने के लिए इस वेक्टर, pMemory-> (i) पर पॉइंटर का उपयोग कर सकूं। मैं वास्तव में वेक्टर-ऑफ-बिसेट्स डिज़ाइन को प्राथमिकता देता हूं, और मैं इसके साथ चिपक रहा हूं (इस कार्यक्रम में ... लगभग 6 घंटे, eek!)बिट्ससेट हेरफेर के लिए अभ्यास की सिफारिश की जाती है?

मुझे पता लगाने में कुछ परेशानी हो रही है अलग-अलग स्थानों में और बाहर बिट्स कैसे प्राप्त करें (अनुरूपित रजिस्टरों और अन्य मेमोरी स्थानों, आदि), इसलिए मैंने स्ट्रीम का उपयोग करने पर कुछ पढ़ा है। मैं इसके साथ आया हूं:

#include <bitset> 
#include <iostream> 
#include <sstream> 
#include <string> 

using namespace std; 

int main() 
{ 


    /** demonstrating use of stringstream to/from bitset **/ 
    { 
     bitset<12> sourceBits(std::string("011010010100")); 
     bitset<12> targetBits(0); 

     stringstream iBits(stringstream::in | stringstream::out); 

     iBits << sourceBits.to_string(); 
     cout << targetBits << endl; 
     iBits >> targetBits; 
     cout << targetBits << endl; 
    } //end stringstream to/from bitset 

    return 0; 
} 

तो, यह काम करता है, और मैं इस कार्यक्रम को अपने कार्यक्रम में फिट करने के लिए अनुकूलित कर सकता हूं।

मेरे सवालों का, कर रहे हैं यह एक अच्छा विचार है? क्या बिट्ससेट >> और < < ऑपरेटरों का उपयोग करने के बारे में कुछ मौलिक है? क्या यह वास्तव में इस मैनुअल wrangling करने के लिए आवश्यक है?

इसके अलावा, स्पर्शरेखीय, मैं क्या जब एक 16-बिट bitset में एक 12 बिट bitset को कॉपी करना चाहिए?

धन्यवाद, stackoverflow! के बाद गूगलिंग के बाद यह मेरा पहला प्रश्न है। मैं हर किसी की अंतर्दृष्टि की सराहना करता हूं!

+0

एक उपयोगी प्रदर्शन कार्यक्रम के लिए +1। –

उत्तर

9

आप समस्या overthinking कर रहे हैं। एक बिटसेट के मूल्य को दूसरे में कॉपी करने के लिए, असाइनमेंट ऑपरेटर का उपयोग करें।

#include <iostream> 
#include <bitset> 
int main() { 
    std::bitset<12> sourceBits(std::string("011010010100")); 
    std::bitset<12> targetBits(0); 

    targetBits = sourceBits; 

    std::cout << targetBits << "\n"; 
} 


आपका स्पर्शरेखा सवाल bitset::to_ulong द्वारा उत्तर दिया जाता है:

#include <iostream> 
#include <bitset> 

int main() { 
    std::bitset<12> sourceBits(std::string("011010010100")); 

    std::bitset<16> sixteen; 
    sixteen = sourceBits.to_ulong(); 
    std::cout << sixteen << "\n"; 
} 
+0

वास्तव में ओवरथिंकिंग। इसके लिए धन्यवाद, यह संकलित और ठीक वैसे ही भाग गया। – absterge

+0

आपका स्वागत है। StackOverflow में आपका स्वागत है! मेरा जवाब स्वीकार करना न भूलें (चेकमार्क पर क्लिक करें)। आपके असाइनमेंट को चालू करने के बाद, उन प्रश्नों के लिए चारों ओर देखें जिन पर आप ** उत्तर दे सकते हैं! –

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

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