Тесты проводились мной и Сергеем Лунгу. Я тестировал на родном Perl, а он — на родном C. Результаты получились неожиданными.
Мой тест показал, что быстрее всего управляется алгоритм определения степени двойки, который был самым ленивым:
log($var)/log(2)
Кроме того, он лишен недостатков, связанных с ограничениями, накладываемыми на степень. При этом методе она может быть и отрицательная, и дробная и вообще.
Сергей провел тесты на C. Первые тесты оказались неверными, но для полноты картины выложу и их. Дальше были проведены уже более корректные тесты.
Суть всей этой петрушки такова, что на Perl, и, как я подозреваю, на php, быстрее всего узнать степень двойки можно при помощи метода вычисления логарифма по основанию два. А на языках низкого уровня (или с типизацией переменных), лучше пользоваться алгоритмом перебора сдвигом.