私は持ってstd::bitset
おり、ビットセット型はビットセットを数値に変換する方法も提供しますto_ulong
。私の問題は、ビットセットの範囲を考慮しながらビットセットを数値に変換することです。独自のpowerof2関数を実装する必要があるか、何かがありますより標準的なアプローチで?
4935 次
2 に答える
8
次のように不要なビットを削除できます
#include <bitset>
#include <iostream>
// drop bits outside the range [R, L) == [R, L - 1]
template<std::size_t R, std::size_t L, std::size_t N>
std::bitset<N> project_range(std::bitset<N> b)
{
static_assert(R <= L && L <= N, "invalid bitrange");
b >>= R; // drop R rightmost bits
b <<= (N - L + R); // drop L-1 leftmost bits
b >>= (N - L); // shift back into place
return b;
}
int main()
{
std::bitset<8> b2(42); // [0,0,1,0,1,0,1,0]
std::cout << project_range<0,8>(b2).to_ulong() << "\n"; // 42 == entire bitset
std::cout << project_range<2,5>(b2).to_ulong() << "\n"; // 8, only middle bit
}
于 2013-07-25T12:12:23.707 に答える
2
string
中間ストレージとして使用できます:
bitset<32> bs (string("1011"));
cout << bs.to_ullong() << endl;
// take a range - 2 last bits in this case
string s = bs.to_string().substr(bs.size() - 2);
bitset<32> bs1 (s);
cout << bs1.to_ullong() << endl;
版画:
11 3
于 2013-07-25T12:21:48.743 に答える