ちょっと触れる機会があったので、わかったことを整理&記録。
#include <iostream> #include <boost/dynamic_bitset.hpp> int main(int, char* []) { boost::dynamic_bitset<> n; n.append(85); n.append(255); std::cout << n << std::endl; return 0; }
実行結果
0000000000000000000000001111111100000000000000000000000001010101
boost::dynamic_bitset
の「ブロック」の大きさは、デフォルトではunsigned long
なので、ひとつ数値を追加すると(この実装では)32ビットが追加されます。またあとから追加された数値が上位ビットに追加されます。
「ブロック」のサイズを変えてみると。
#include <iostream> #include <boost/dynamic_bitset.hpp> int main(int, char* []) { boost::dynamic_bitset<unsigned char> n; n.append(85); n.append(255); std::cout << n << std::endl; return 0; }
実行結果
1111111101010101
「ブロック」のサイズがunsigned char
のビットサイズ(8)になっています(数値をふたつ追加したので全体で16ビットになっています)。
「ブロック」列を使って初期化することもできます。
#include <iostream> #include <boost/dynamic_bitset.hpp> int main(int, char* []) { // こっちが下位 <----> こっちが上位 const unsigned char a[] = { 1, 3, 7, 15, 31, 63, 127, 255 }; boost::dynamic_bitset<unsigned char> n(a, a + sizeof(a)); std::cout << n << std::endl; return 0; }
実行結果
1111111101111111001111110001111100001111000001110000001100000001