Есть ли простой способ извлечения экспоненты из степени 2 с помощью побитовых операций?
РЕДАКТИРОВАТЬ: Хотя вопрос был первоначально о побитовых операциях, поток также хорошо читается, если вам интересно "Какой самый быстрый способ найти X, если Y = 2 > X в Python?" **
В настоящее время я пытаюсь оптимизировать рутину (критерий примитивности Рабина-Миллера), который уменьшает четное число N в формах 2**s * d
. Я могу получить 2**s
часть:
two_power_s = N & -N
но я не могу найти способ извлечь только " s" с побитовой операцией. Обходные пути, которые я сейчас тестирую без особого удовлетворения (все они довольно медленные):
- с использованием функции логарифма
- манипулирование двоичным представлением 2 ** s (т.е. подсчет конечных нулей)
- зацикливание на деление на 2, пока результат не будет равен 1
Я использую python, но ответ на этот вопрос должен быть языковым агностиком, я полагаю.