我刚刚写了些东西来测试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
的引用。
如果要显示转换为float
的int
,请使用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/