Здравствуйте, saproj, Вы писали:
S>Составить таблицу из 32 значений:
S>Потом двоичным поиском за 5 сравнений можно получить ответ.
За 5 сравненй дающих 2 варианта нельзя выбрать один из 33 ответов.
Если число известно заранее можно вычислить логарифм так:
template<unsigned long N>
struct lg{
enum{ result = lg<N/2>::result + 1 };
};
template<>
struct lg<0ul>{
//В числе ноль нет установленных в единицу бит.
enum{ result = -1 };
};
int main(){
enum{num=12345};
std::cout << num << std::endl;
std::cout << lg<num>::result << std::endl;
}