Re[2]: как быстро получить номер старшего знач. бита в лонге
От: Dmi_3 Россия  
Дата: 17.11.05 19:52
Оценка:
Здравствуйте, 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;
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.