首页 > 后端开发 > C++ > 正文

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

Barbara Streisand
发布: 2024-11-11 06:08:02
原创
674 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板