У меня есть набор битов размером 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.