Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否有合理的方法从位集中提取最低有效位? 我有一个大小为81的位集,所以它不适合任何原始C++类型。我需要从位集中访问9位连续子集,并想象我可以移动大集合并调用.to_ulong()来提取它们。似乎STL想要安全,在我尝试时只会给我一个溢出错误 int offset = something_that_is < 81; bitset<81> set; int subset = ((set >> offset).to_ulong()) & 511; int offset=u小于81的某物; 位集; int subset=((设置>>偏移量).to_ulong())&511;_C++_Stl_Bitset - Fatal编程技术网

是否有合理的方法从位集中提取最低有效位? 我有一个大小为81的位集,所以它不适合任何原始C++类型。我需要从位集中访问9位连续子集,并想象我可以移动大集合并调用.to_ulong()来提取它们。似乎STL想要安全,在我尝试时只会给我一个溢出错误 int offset = something_that_is < 81; bitset<81> set; int subset = ((set >> offset).to_ulong()) & 511; int offset=u小于81的某物; 位集; int subset=((设置>>偏移量).to_ulong())&511;

是否有合理的方法从位集中提取最低有效位? 我有一个大小为81的位集,所以它不适合任何原始C++类型。我需要从位集中访问9位连续子集,并想象我可以移动大集合并调用.to_ulong()来提取它们。似乎STL想要安全,在我尝试时只会给我一个溢出错误 int offset = something_that_is < 81; bitset<81> set; int subset = ((set >> offset).to_ulong()) & 511; int offset=u小于81的某物; 位集; int subset=((设置>>偏移量).to_ulong())&511;,c++,stl,bitset,C++,Stl,Bitset,这段代码虽然在数学上非常安全,但抛出了一个异常。我可以强迫它得到最低有效的ulong吗?或者我需要使用[]运算符提取位吗 我注意到有一个由数组组成的底层实现,但是引用它的所有成员似乎都是私有的 虽然前面的代码不起作用,但这个代码起作用 int offset = something_that_is < 81; bitset<81> set; int subset = ((set >> offset) & 511).to_ulong(); int offset

这段代码虽然在数学上非常安全,但抛出了一个异常。我可以强迫它得到最低有效的ulong吗?或者我需要使用[]运算符提取位吗

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

虽然前面的代码不起作用,但这个代码起作用

int offset = something_that_is < 81;
bitset<81> set;
int subset = ((set >> offset) & 511).to_ulong();
int offset=u小于81的某物;
位集;
int子集=((设置>>偏移量)和511.to_ulong();

虽然这应该是一个无符号的长字符而不是整数。

更接近我认为您想要的:

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;
}
std::位集bs;
常量std::位集nineset=0x1ff;
集合的整数=81/9;
对于(int x=0;x<集合的数量;x++)
{
std::位集tmp=bs;
tmp&=nineset;
unsigned long value=tmp.to_ulong();//这是您的值
//准备下一盘
bs>>=9;
}

虽然在您的示例中这是可以的,但我不会命名变量
集。因为已经有了
std::set
类型,这会让人感到困惑。如果在
之前执行
&511
操作,会有帮助吗?