Создать битовую маску

Дано два целых числа; size а также offsetкак бы я сгенерировал битовую маску со следующими свойствами;

MSD             LSD
1111 1111 0000 1111
^  ^
size = 4 -|  |
|
offset = 4  -|

Редактировать; Кажется, это работает (нашел решение, после того, как спросил)

((1 << size) - 1) << offset;

1

Решение

Поскольку вопрос помечен как 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();

Производительность зависит от читателей.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector