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;
Искомое константное выражение выделено жирным. |