【发布时间】:2011-12-12 19:26:02
【问题描述】:
我在 Dev C++ IDE 中编写了这个程序。我期待它可能会崩溃。但它显示正确的输出。有人可以解释一下这里的内存是如何分配的。为什么这是有效的。
int main()
{
int i=10;
double d=3333333.555 ;
i=d+d;
printf(" Value of I after assignment %d",i);
getch();
}
【问题讨论】:
-
内存是如何分配的?这是简单的加法。
-
例如:int i;双 d=3333333.555; i = int (d);
-
如果我没记错的话,运算的顺序是3333333.555 + 3333333.555(加法运算符),结果是6666667.11(仍然是double)。然后将结果转换为 int(赋值运算符),导致值被截断为 6666667。这是您期望的值吗?
-
对不起,我认为上述行为是正确的。因为我使用的是 64 位的 Windows 7 操作系统。我试图在'd'中给出很大的值,即(111113333333.555)然后它打印值-2147483648。现在请解释如何处理这种情况。在 UNIX 中,Integer 需要 4 个字节来存储值,但 double 需要 8 个字节。因此,当变量的值大于 64687 时。那么 double 值如何存储在该 int 变量中。
-
你到底在问什么?为什么不崩溃?内存是怎么分配的?结果值的解释?这里有什么问题?