pow 函数 C++ 错误

pow function c++ error

我正在尝试为十进制到二进制转换器创建一个辅助函数,它会根据 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, 等) 但似乎无法让它工作。

我做错了什么?

没有pow() 此类参数类型的函数。它可以是 (float, int)(double, int)(long double, int)。如果你用 (int, int) 调用它,编译器不知道上面使用的是哪种类型。最简单的解决方案是:

pow(2.0, i)

编辑: 我假设您使用来自 <cmath><math.h>

的标准 pow() 定义

获得 2 的幂的最简单(也是最快)的方法是移动 - CPU 无论如何都使用二进制,因此它可以为您在末尾添加几个额外的零。

所以你应该写 (1 << i).

而不是 pow(2, i)

转换可能是你的错误:你可以轻松地将 int 转换为 double 或 float。 试试这个:

pow(2.0, i)

它会表现得像:

pow((double)(2), i)