Лучший способ создать следующую битовую маску для заданного ввода - PullRequest
3 голосов
/ 26 марта 2011

Я пытаюсь найти лучший способ для генерации следующей битовой маски: - Для заданного входа n выходной будет битовая маска, в которой установлены первые (n-1) биты, а все остальные биты не установлены.

Пример:

if n = 1, output = 0x00000001 = 00000000000000000000000000000001
if n = 2, output = 0x00000003 = 00000000000000000000000000000011
if n = 3, output = 0x00000007 = 00000000000000000000000000000111

Я знаю об очевидном итеративном способе (установка битов по одному), который бы занимал O (n) времени ... Мне просто интересно, есть ли какая-нибудь "магия битов", которая может сделать это в постоянное время или, по крайней мере, сублинейное время (без использования LUT !!)

Есть ли кто-нибудь?

1 Ответ

9 голосов
/ 26 марта 2011

Это должно сделать это: (1 << n) - 1

...