首页  >  文章  >  后端开发  >  为什么即使分配给'long long”变量,乘法整数常量也会溢出?

为什么即使分配给'long long”变量,乘法整数常量也会溢出?

Barbara Streisand
Barbara Streisand原创
2024-11-11 06:08:02675浏览

Why does multiplying integer literal constants overflow even when assigning to a `long long` variable?

溢出长长乘法

考虑以下代码:

long long int n = 2000*2000*2000*2000;    // overflow

为什么这段代码会导致溢出当乘以整数常量并将结果分配给 long long 时变量?

与以下可行的方法相比:

long long int n = pow(2000,4);            // works
long long int n = 16000000000000;         // works

C 中的整数文字具有取决于其值的默认类型。在这种情况下,2000 可以容纳 int 变量,该变量通常是 32 位类型。

使用较大类型的操作数执行算术运算,但不能小于 int。因此,在第一种情况下,乘法是作为 int*int 执行的,得到一个 int 结果。

出现问题是因为 int 结果可能会溢出,但代码试图将其存储在一个 long long 变量中。 C 不会根据目标推断类型,因此赋值不会防止溢出。

要避免此问题,您可以在将它们相乘之前将整数文字显式转换为 long long:

long long int n = (long long int)2000*2000*2000*2000;

以上是为什么即使分配给'long long”变量,乘法整数常量也会溢出?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn