有没有合理的方法从bitset中提取最低有效数字?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有没有合理的方法从bitset中提取最低有效数字?相关的知识,希望对你有一定的参考价值。

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

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

这段代码虽然在数学上非常安全,却引发了异常。我可以强制它以某种方式给我最不重要的ulong或者我需要使用[]运算符提取位吗?

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

虽然前面的代码不起作用,但这个代码确实有效。

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

虽然这应该是一个unsigned 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;
}

以上是关于有没有合理的方法从bitset中提取最低有效数字?的主要内容,如果未能解决你的问题,请参考以下文章

迭代std :: bitset中真实位的有效方法?

在 Python 中读取最低有效位

图像隐写基于LSB+DCT实现数字水印嵌入提取带攻击测试matlab源码含GUI

从整数数组构造位集

语音隐写基于matlab GUI LSB语音信号数字水印嵌入提取(带面板)含Matlab源码 1676期

从向量中提取最小值、最大值和中值的最有效方法是啥