c - c 中 pow() 的语法错误

标签 c

无法弄清楚我遇到的语法错误,我有正确的 header 所以不知道

int get_block_size(int num) {
    int i= 0;

    for (i=0; num < pow(2.0,double(i)); ++i);

    return int(pow(2.0,double(i)));
}

我得到的错误

sidhuh@ius:~ $ gcc -o b buddy.c
buddy.c: In function `get_block_size':
buddy.c:24: error: syntax error before "double"
buddy.c:24: error: syntax error before ')' token

最佳答案

您将 i 转换为 double 是不正确的:在 C 中,您将类型放在括号中,如下所示:

for (i=0; num < pow(2, (double)i); ++i)
    ;
return (int)(pow(2,(double)i));

这应该可以修复语法错误。但是,这不是最有效的 - 您可以通过向左移动 1 来获得 2 的幂,所以不用写

(int)pow(2, i)

你可以写

1 << i;

这与您可以通过在 1 之后写入 k 零来获得十进制中的 k 十次方的原因相同.

注意:您似乎在尝试将数字四舍五入为最接近的 2 的次方。有一个“有点乱七八糟的黑客”可以帮助您以更少的操作和没有循环的方式完成它。按照说明here .

unsigned int v; // compute the next highest power of 2 of 32-bit v
v--;
v |= v >> 1;
v |= v >> 2;
v |= v >> 4;
v |= v >> 8;
v |= v >> 16;
v++;

关于c - c 中 pow() 的语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22750682/

相关文章:

c - 从函数返回结构体的动态数组

c - 如何创建按多种数据类型排序的链表

c - 为什么我们可以对 scanf 和 printf 使用 %d?

c - 第一个 tcp echo 客户端无法与第二个 tcp echo 客户端通信(文件描述符错误)

c++ - 清楚地说明 * 和 & 作为类型的一部分和作为取消引用/address_of 运算符之间的区别

在 C 编程中比较两个文件以匹配行

c - 海合会: "warning: assignment from incompatible pointer type"

c - 在C中获取附近的Wifi

python - python在哪里寻找ctypes.cdll.<name>在windows上打开的dll?

c - 用C代码编写二进制数字系统