Boost dynamic_bitset - поместить целое число в диапазон битов

У меня есть 7-битный /56-битный набор битов, который при построении устанавливает первый бит в один:

boost::dynamic_bitset<> b(56, 1);

После создания я хотел бы поместить целое значение (скажем, 2019) в биты с 4 по 15. Мне интересно, есть ли простой способ в бусте сделать это без побитовых операций? По сути, я хочу установить диапазон битов в целочисленное значение, которое, как я знаю, достаточно мало, чтобы соответствовать этим битам. Спасибо за любой совет.

1 ответ

Решение

boost::dynamic_bitset<> предлагает гораздо меньше функциональности. Я думаю, что единственная возможность - использовать обычный цикл:

template <typename Bitset>
void set_in_range(Bitset& b, unsigned value, int from, int to)
{
  for (int i = from; i < to; ++i, value >>= 1)
    b[i] = (value & 1);
}

boost::dynamic_bitset<> b(56, 1);
set_in_range(b, 2019, 4, 15);
Другие вопросы по тегам