我知道这是愚蠢的,但我在编程世界中是一个安静的菜鸟,这里是我的代码.
这个完美的工作:
#include <stdio.h>
int main() {
float x = 3153600000 ;
printf("%f", x);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但是这个有一个问题:
#include <stdio.h>
int main() {
float x = 60 * 60 * 24 * 365 * 100 ;
printf("%f", x);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
那么60*60*24*365*100是3153600000吧??? 如果是,那为什么会产生不同的结果?我得到了第二个溢出的溢出,结果是"-1141367296.000000".谁能告诉我为什么?
你是乘以整数,然后将结果放在一个浮点数.到那时,它已经溢出.
试试float x = 60.0f * 60.0f * 24.0f * 365.0f * 100.0f;.你应该得到你想要的结果.
60是整数,因为是24,365,和100.因此,整个表达式60 * 60 * 24 * 365 * 100使用整数运算执行(编译器在查看表达式的变量之前评估表达式).
在典型的32位架构中,有符号整数最多只能保存2,147,483,647的值.因此,在将值分配给变量之前,该值将被截断为32位float.
如果你告诉编译器使用浮点运算,例如通过添加f第一个值使其浮动,那么你将获得预期的结果.(一个浮点乘以一个int是一个浮点数,因此浮点数传播到整个表达式.)例如:
float x = 60f * 60 * 24 * 365 * 100;
Run Code Online (Sandbox Code Playgroud)