2017-01-19 22 views
4

コンパイル時にインデックスの一部でstd :: bitsetを初期化しようとしていますが、50-75と200-225を1に設定してください。コンパイル時にC++ std :: bitsetを初期化する

constexpr bitset(); 
constexpr bitset(unsigned long long val); 

は、誰かが私は2番目のコンストラクタは、大規模なインデックスのために働かない考える私のビットセットを初期化する方法をに光を当てるでした:?私の2つのオプションがあるように見えますhttp://en.cppreference.com/w/cpp/utility/bitset/bitset に基づいて

+1

は[bitset2](https://github.com/ClaasBontus/bitset2)を見てください。 –

答えて

0

文字列を引数にとり、そのように初期化するコンストラクタを使用できます。

たとえば、次の行は、0000000101111001b初期化します:

std::bitset<16> b (std::string("0101111001")); 
+5

もちろん、それは 'constexpr'コンストラクタではありません。 OPはコンパイル時の初期化のために 'constexpr'を必要とします。 – ShadowRanger

1

ビットセットコンストラクタconstexpr bitset(unsigned long long val)を上方位置64からそれができないプリセットビット(符号なし長い長が64ビット値であるように)という意味で制限されています。

std::bitset<70> bl(ULLONG_MAX); // [0,0,0,0,0,0,1,1,1,...,1,1,1] in C++11 

あなたは、コンストラクタでも上位ビットを初期化したい場合は、私はあなたの周り得ることはありませんと思う:任意のビットがより高く64は、以下の例が示す(参照bitset constructors)として、0で初期化されますstringまたはchar*の初期化子、すなわちタイプ(3)またはタイプ(4)のビットセットコンストラクタを使用することです。

もちろん、長さ256のビットセットのために、初期化文字列は長くなる:

std::bitset<256> myBitset("111100000011111000001110000010101000100000100010010000100000000001111"); 
// I did not count the digits... 
関連する問題