VD>Можно ли без цикла посчитать количество битов требуемое для представления числа?
VD>Ну, то есть вместо этого:

VD>
VD>int iResidue = sizeof(array) / sizeof(array[0]);
VD>for(; iResidue; iBits++)
VD>{
VD>    iResidue >>= 1;
VD>    iBits++;
VD>}
VD>


VD>Написать константное выражение?


Если предположить, что в приведенном примере один инкремент iBits++ лишний, то код может быть таким:

template<unsigned n>
struct NBits
{
  enum { value = NBits<(n >> 1)>::value + 1 };
};

template<>
struct NBits<0>
{
  enum { value = 0 };
};

unsigned iBits = NBits<sizeof(array) / sizeof(array[0])>::value;


Искомое константное выражение выделено жирным.
Автор: Павел Кузнецов    Оценить