Есть ли разумный способ извлечь наименее значимые цифры из набора битов? - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть набор битов размером 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 или мне нужно извлечь биты с помощью оператора []?

Я заметил, что есть базовая реализация, состоящая из массива, но все члены, ссылающиеся на него, кажутся приватными.

пока предыдущий код не работает, этот работает.

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

Хотя это, вероятно, должно было быть unsigned long вместо int.

1 Ответ

0 голосов
/ 07 сентября 2018

ближе к тому, что я думаю, что вы хотите:

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;
}
...