我刚刚写了些东西来测试sizeof操作符。
首先,当我构建这个程序时,GCC会给我一个警告。

main(){
    printf("%d", (2*3.14f));
}
// test.c|2|warning: format '%d' expects argument of type 'int',
// but argument 2 has type 'double' [-Wformat=]

因此GCC认为(2*3.14f)的类型是double
然后我添加了一个sizeof操作符,我假设输出正好是8,也就是double的大小。
main(){
    printf("%d", sizeof(2*3.14f));
}
//Output: 4

这真是令人困惑。所以问题是:(2*3.14f)的类型是什么?

最佳答案

(2*3.14f)具有类型float。当传递给变量函数时,它被提升为double,因此GCC错误消息中对double的引用。
如果要显示转换为floatint,请使用printf("%d", (int)…);
如果要将float的位显示为int,请使用:

int i;
assert(sizeof(f) == sizeof(i));
memcpy(&i, &f, sizeof(f));
printf("%d", i);

关于c - (2 * 3.14f)是什么类型?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22881102/

10-10 15:03