无法弄清楚我遇到的语法错误,我有正确的标题所以不知道
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)));
}
Run Code Online (Sandbox Code Playgroud)
我得到的错误
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
Run Code Online (Sandbox Code Playgroud)
您的i转换double是不正确的:在C中,您将类型放在括号中,如下所示:
for (i=0; num < pow(2, (double)i); ++i)
;
return (int)(pow(2,(double)i));
Run Code Online (Sandbox Code Playgroud)
这应该修复语法错误.然而,这不是最有效的 - 你可以通过1左移来获得2的幂,所以而不是写
(int)pow(2, i)
Run Code Online (Sandbox Code Playgroud)
你可以写
1 << i;
Run Code Online (Sandbox Code Playgroud)
这的工作原理与您k在十进制系统中通过写入k零后获得-th幂为10的原因相同1.
注意:看起来你试图将数字四舍五入到最接近的两个数.有一个"有点笨拙的黑客",可以帮助您减少操作和没有循环.按照这里的描述.
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++;
Run Code Online (Sandbox Code Playgroud)