Боюсь, что нет. Каждая из битовых позиций является независимым потоком данных. До тех пор, пока вы ограничены этим, никакая побитовая операция не приведет к тому, что один бит повлияет на любую позицию, отличную от ее собственной.
Даже если вы разрешаете базовую арифметику, соответствующие операции умножаются и делятся по степеням 2 - медленнее и менее очевидны, чем операции сдвига.
Чтобы сдвинуть правые N бит, разделите их на 2^N. Чтобы сдвинуть левые N бит, умножьте на 2^N.
Если биты находятся в одном и том же месте каждый раз, и вы можете использовать их там, где они есть, а затем переместите маску. Например,
word & 0x3FC0
получит биты 2-9 (или 13-6, в зависимости от вашей индексации) слова.
Как и прежде, я был бы удивлен, обнаружив, что арифметика быстрее, чем смещение. Какую платформу вы используете, где Смещение медленное? Большинство процессоров имеют это в качестве машинной инструкции.
Поскольку вы не разделяя детали машины или приложения, все, что я могу предложить, чтобы перейти к ближайшей границе байта - не более 4 бита в сторону - и извлечь нужное значение путем доступа байт. Если это еще не разумное решение для вас, я буду ждать описания проблемы.
Как вы определили, что оператор сдвига занимает много времени? Сколько? Возможно, вам следует показать небольшой пример кода того, что вы делаете. –