在c中,我正在尝试在源代码的某处评估表达式,例如;
I = foo * int pow(10, 8) ;
其中foo是一个整数,我想将I分配给:foo * 10 ^ 8
它给了我; error: expected expression before 'int'
我的表情有什么问题?
答案 0 :(得分:1)
(int)如果你打算施放
答案 1 :(得分:1)
要将值计算为int
,请使用:
I = foo * (int)pow(10, 8);
或简单地说:
I = foo * 1E8;
或更好:
I = foo * 100000000;
演员实际上是隐含的,并且使其显式甚至可能触发警告。
请注意,int
类型的范围有限,不能代表非常大的数字。您可以使用long long
或double
进行具有如此大值的计算。
答案 2 :(得分:0)
@Vincent很好地解答了语法问题
// I = foo * int pow(10, 8) ;
I = foo * (int) pow(10, 8);
使用pow()
计算整数幂可能会产生问题。一些弱数学库可能返回一个比预期数学结果小的值。对于(int)
,该值如果被截断,则为123.999999 - > 123.0。使用舍入函数进行补偿。
I = foo * lround(pow(10, 8));
此外,double
的精确度可能小于int
,引入了其他问题。 @chqrlie
考虑使用整数幂函数。很容易制作。
#include <stdint.h>
uintmax_t powjuu(unsigned x, unsigned y) {
uintmax_t z = 1;
uintmax_t base = x;
while (y) {
if (y & 1) { // or y % 2
z *= base;
}
y >>= 1; // or y /= 2;
base *= base;
}
return z;
}
I = foo * powjuu(10, 8);