// log2的快速整数算法
// 通过掩码计算出powerOfTwo的最高位数,
// 即log2(powerOfTwo)的值。
template <typename T>
T Mathematics::BitHacks
::Log2OfPowerOfTwo( T powerOfTwo )
{
BOOST_STATIC_ASSERT((boost::is_integral<T>::value));
ASSERTION(0 < powerOfTwo,"powerOfTwo必须大于0");
const int maskSize = 5;
// 1111 1111 1111 1111 1111 1111 1111 1111
// 1111 1111 0000 0000 1111 1111 0000 0000
// 1111 0000 1111 0000 1111 0000 1111 0000
// 1100 1100 1100 1100 1100 1100 1100 1100
// 1010 1010 1010 1010 1010 1010 10
// 通过掩码计算出powerOfTwo的最高位数,
// 即log2(powerOfTwo)的值。
template <typename T>
T Mathematics::BitHacks
::Log2OfPowerOfTwo( T powerOfTwo )
{
BOOST_STATIC_ASSERT((boost::is_integral<T>::value));
ASSERTION(0 < powerOfTwo,"powerOfTwo必须大于0");
const int maskSize = 5;
// 1111 1111 1111 1111 1111 1111 1111 1111
// 1111 1111 0000 0000 1111 1111 0000 0000
// 1111 0000 1111 0000 1111 0000 1111 0000
// 1100 1100 1100 1100 1100 1100 1100 1100
// 1010 1010 1010 1010 1010 1010 10