Дано два целых числа; size
а также offset
как бы я сгенерировал битовую маску со следующими свойствами;
MSD LSD
1111 1111 0000 1111
^ ^
size = 4 -| |
|
offset = 4 -|
Редактировать; Кажется, это работает (нашел решение, после того, как спросил)
((1 << size) - 1) << offset;
Поскольку вопрос помечен как c ++, я собираюсь предоставить решение на основе STL:
bitset<NUM_BITS> bs(0);
bs = ((bs.flip() << size).flip() << offset).flip();
Один и тот же код разбит на несколько строк:
bitset<NUM_BITS> bs(0);
bs.flip();
bs <<= size;
bs.flip();
bs <<= offset;
bs.flip();
Производительность зависит от читателей.
Других решений пока нет …