二进制反转为十进制数

爱奥努特·亚历山德鲁

创建一个名为reversed_binary_value的模板函数。它必须使用任意数量的布尔值作为模板参数。这些布尔值以相反的顺序表示二进制数字。您的函数必须返回一个与布尔值表示的数字的二进制值相对应的整数。例如:reversed_binary_value <0,0,1>()应该返回。

这就是问题所在,我以这种方式解决了。

template<bool...digits>
int reversed_binary_value()
{
    vector<bool> vec = {digits...};
    int result = 0;
    for(int i = 0; i < vec.size(); i++)
        result += pow(2 * vec[i],  i);        
    return result;
}

template <int N>
void sum()
{
    std::cout << "Number is: ";
}

int main()
{
     std::cout << reversed_binary_value<1,0,0,0,1,1>();
    //sum<reversed_binary_value<1,0,0,0,1,1>()>();
}

我正在尝试调用函数sum,但出现此错误:调用非constexpr函数'int reversed_binary_value()。我知道不是编译时指令。我的问题是,我怎么称呼函数sum?

科斯塔斯

您可以使用递归方法:

#include <iostream>

template <typename = void>
constexpr int binary() {
        return 0;
}
template <bool d, bool...digits>
constexpr int binary() {
        return d + 2 * binary<digits...>();
}

template <int N>
void sum() {
        std::cout << N;
}
int main() {
        sum<binary<1,0,1>()>(); // prints 5
}

这允许您constexpr为二进制函数添加(无循环),并允许模板调用求和的常数传播:)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章