gpt4 book ai didi

c - 为什么 long long 和 int 相乘会产生溢出?

转载 作者:行者123 更新时间:2023-12-04 01:31:04 29 4
gpt4 key购买 nike

我正在用c测试这段代码

  long long n = 1000000;
long long var1,var2;
int x = 50000;
var1 = n * x * x;
var2 = x * x * n;
printf("var1 = %lld\n", var1);
printf("var2 = %lld\n", var2);

当我运行它时产生这个输出

var1 = 2500000000000000
var2 = -1794967296000000

我不明白为什么改变相乘的变量顺序会产生溢出。

最佳答案

在这种情况下,关联性是从左到右,所以发生的情况是:

  var1 = (n * x) * x;
var2 = (x * x) * n;

n * x 的情况下,x 将被转换为 long long 因为 nlong long,所以它有更高的转换排名。因此,该部分结果不会溢出。

但是对于 x * x,两个操作数都是 int 因此结果也将是 int,并且不能容纳值 2,500,000,000,这会导致溢出。

关于c - 为什么 long long 和 int 相乘会产生溢出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61044217/

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