您可以使用模板预先计算2的幂表

时间:2014-11-20 09:43:56

标签: c++ exponential

当我问一个问题时,说明找到2的幂的最快方法是什么,我得到答案“预先计算它们并使用查找表”。

如何使用模板预先计算2的幂表?

链接到我之前的问题:Better way to find the powers of 2

2 个答案:

答案 0 :(得分:4)

这是一个想法:

constexpr std::array<unsigned long long, 16> LUT = {
     1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768 };

答案 1 :(得分:2)

template <int N>
struct pow2 
{
    enum { value = 2 * pow2<N - 1>::value };
};

template <>
struct pow2<0> 
{
    enum { value = 1 };
};

void foo()
{
    const int x = pow2<4>::value; // == 16
    const int y = pow2<0>::value; // == 1
    int arr[x] = {0}; // Because x is constant
}

Live code here
我仍然希望1U << n超过pow2<n>::value,除非有强有力的证据表明性能下降。