我有一个大小为81的位集,因此它不适合任何原始c++类型。我需要从位集中访问9位连续的子集,并想象我可以移动大集并调用.to_ulong()来提取它们。似乎STL希望安全,在尝试时只会给我一个overflow_error。

int offset = something_that_is < 81;
bitset<81> set;
int subset = ((set >> offset).to_ulong()) & 511;

该代码段尽管在数学上是绝对安全的,但会引发异常。我是否可以强制以某种方式给我最小的ulong,还是需要使用[]运算符提取位?

我注意到有一个由数组组成的底层实现,但是所有引用该数组的成员似乎都是私有(private)的。

尽管前面的代码不起作用,但上面的代码却起作用。
int offset = something_that_is < 81;
bitset<81> set;
int subset = ((set >> offset) & 511).to_ulong();

虽然那应该应该是一个无符号的long而不是一个int。

最佳答案

更接近我想你想要的:

std::bitset<81> bs;
const std::bitset<81> nineset = 0x1ff;
int number_of_sets = 81 / 9;

for (int x = 0; x < number_of_sets; x++)
{
    std::bitset<81> tmp = bs;
    tmp &= nineset;
    unsigned long value = tmp.to_ulong(); // this is your value

    // prep for the next set
    bs >>= 9;
}

关于c++ - 有什么明智的方法可以从位集中提取最低有效位?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52215775/

10-12 16:48