我正在尝试为十进制到二进制转换器创建一个辅助函数,它将根据最高2的幂来告诉我要启动哪个位。
这是我的代码:
int determineStart(int val){
int topval = 1;
int i = 0;
for(i = 0; val > 2 * topval; ++i){
topval = pow(2, i);
}
return topval;
}
我收到以下错误:
main.cpp:9: error: call of overloaded pow(int, int&) is ambiguous
我尝试过切换一些内容(例如将double
或单独的变量作为pow()
的第二个参数,使topval
成为double
,等)但似乎无法让它发挥作用。
我做错了什么?
答案 0 :(得分:2)
获得2的幂的最简单(也是最快)的方法是转移 - 无论如何CPU都使用二进制,所以它可以为你添加一些额外的零。
因此,您需要编写pow(2, i)
而不是(1 << i)
。
答案 1 :(得分:1)
此类参数类型没有pow()
函数。它可以是(float, int)
,(double, int)
或(long double, int)
。如果用(int, int)
调用它,编译器就不知道上面哪种类型使用了。最简单的解决方案是:
pow(2.0, i)
编辑:
我假设您使用pow()
或<cmath>
<math.h>
定义
答案 2 :(得分:1)
转换可能是您的错误:您可以轻松地将int转换为double或float。 试试这个:
pow(2.0, i)
它的行为类似于:
pow((double)(2), i)