2017-07-04 21 views
2

は、私はものがnullのフラグにパラメータの数と整数を受け取り、リモートサービスがあります。私は素朴な実装を試してみたビットの設定方法は?

byte<(param_count + 7)/8> null bitmap 

を私はビットシフトで何の経験をしたんので、私は思いますむしろそれを示していない。

ブール値のベクトルを考えると、私はどのようにビットマップを作成できますか?

+1

'std :: vector 'はビットマップです。 'std :: bitset'のように:http://en.cppreference.com/w/cpp/utility/bitset – Jonas

+0

' std :: vector 'を整数に変換するにはどうしたらいいですか? – ruipacheco

+0

'bitset'を使うなら' to_ulong'メソッドを使うことができます。ベクトル実装では、フードの下でビットセットを使用することがありますが、必ずしもそうする必要はありません。 –

答えて

4

param_countがコンパイル時にわかっている場合は、std::bitsetを使用できます。次に例を示します。

// Define a bitmap with 'param_count + 7' elements 
std::bitset<param_count + 7> b; 

// Set the fifth bit, zero is the first bit 
b[4] = 1; 

// Convert to 'unsigned long', and the casting it to an int. 
int a = int(b.to_ulong()); 

param_countコンパイル時に知られてされていない場合、あなたはstd::vector<bool>を使用することができます。

// Define a bitmap with 'param_count + 7' elements 
std::vector<bool> b(param_count + 7); 

// Set the fifth bit, zero is the first bit 
b[4] = 1; 

// Convert to 'int' 
int a = std::accumulate(b.rbegin(), b.rend(), 0, [](int x, int y) { return (x << 1) + y; }); 

intstd::vector<bool>から変換はthis answerから取得され:ここで別の例です。

+0

@ Rakete1111そうです、私は 'ベクトル'バージョンを追加しています。 – Jonas

+0

param_countはコンパイル時には分かりません。 – ruipacheco

関連する問題