有没有一种明智的方法可以从位集中提取最低有效数字?
Is there a sensible way to extract the least significant digits from a bitset?
我有一个大小为 81 的位集,因此它不适合任何原始 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;
}
我有一个大小为 81 的位集,因此它不适合任何原始 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;
}