gpt4 book ai didi

c - 在评估 C 表达式时,临时结果存储在哪里?

转载 作者:行者123 更新时间:2023-12-02 08:49:31 25 4
gpt4 key购买 nike

下面是我提出上述疑惑的程序。

#include <stdio.h>
int main() {
int g = 300000*300000/300000;
printf("%d",g);
return 0;
}

* 被评估时,结果将是 90000000000。然后除以 300000。我希望第一个表达式结果存储在某处,然后除以 300000。所以输出将是 300000

但它给了我 -647。这是否意味着它被评估为:

g = 300000*300000;
g = g / 300000;

最佳答案

无论存储在哪里,它仍然是int类型。假设 int 在您的机器上是 32 位的,您将得到 300000*300000 的整数溢出。

300000*300000 -> 90000000000 -> -194313216  (integer overflow)
-194313216 / 300000 -> -647

基本上,临时对象(或中间体)不会神奇地让您绕过溢出。


*请注意,有符号整数溢出在技术上是未定义的行为。但在这种情况下,它恰好以您期望的方式环绕。

关于c - 在评估 C 表达式时,临时结果存储在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9562455/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com