Working with 64 bit dynamic bitsets....(uncertain of my method)
Can anyone suggest a more efficient method to break apart a 64 bit dynamic bitset into 32 bit unsigned int chunks? The conversion is needed because eventually a C style system IO call needs to be performed that can't deal with a boost::dynamic_bitset or std::bitset; Thanks for any help/advice, Graham This works, but it feels inefficient: #include <iostream> #include "boost/dynamic_bitset.hpp" using namespace std; using namespace boost; // Create a 64 bit dynamic bitset from two 32 bit words, not 64 bit portable, illustration only dynamic_bitset<> create_64_bitset(unsigned int ms_word, unsigned int ls_word); int main(int argc, char* argv[]) { dynamic_bitset<> bitset_64( create_64_bitset(static_cast<unsigned>(0xaaaaaaaa), static_cast<unsigned>(0xbbbbbbbb))); cout << bitset_64 << endl; // This whole portion, below, seems inefficient. Is it? Is there a better method? // Break 64 bit dynamic bitset into 32 bit words dynamic_bitset<> temp_bitset(bitset_64); // Get least sig. 32 bits unsigned int ls_word = ((bitset_64 <<= 32) >>= 32).to_ulong(); // Get most sig 32 bits unsigned int ms_word = (temp_bitset >>= 32).to_ulong(); cout << ls_word << endl << ms_word << endl; cin >> argc; return 0; } dynamic_bitset<> create_64_bitset(unsigned int ms_word, unsigned int ls_word) { // Create a 64 bitset dynamic_bitset<> most_sig_word(64, ms_word); most_sig_word <<= 32; dynamic_bitset<> least_sig_word(64, ls_word); // Combine the two into one 64 bit bitset most_sig_word |= least_sig_word; return most_sig_word; }
participants (1)
-
Graham Reitz