Я могу придумать три способа сделать это с головы. Я расскажу им об этом быстро.Какова наилучшая практика создания битовой маски для ряда бит?
char mask = (1<<top)
mask = mask-1
mask = mask>>bot
mask = mask<<bot
3 shifts, 1 addition
char topMask = (1<<top)
topMask = topMask -1
char botMask = (1<<bot)
botMask = botMask - 1
char mask = topMask - botMask
2 shifts, 3 additions
char mask = (1<<(top-bot))
mask = mask - 1
mask = mask << bot
2 shifts, 2 additions
Кажется, что первый будет немного быстрее? Считается ли лучшим по стилю? Есть ли действительно хороший способ, которого я пропускаю, или я делаю что-то глупое? Благодаря!
Мне было бы особенно интересно, сможет ли кто-нибудь указать мне место, которое это делается в ядре linux.
EDIT: кто-то разместил что-то подобное в другом виде и удалил его? Довольно похож на второй. Но XOR вместо вычитания.
char mask = ((1<<top)-1)^((1<<bot)-1)
У этого вряд ли есть ответ «лучшей практики». Выберите, какая версия кажется ясной, прокомментируйте, что она делает, затем переходите. –