首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >等价表达式上的整数溢出?

等价表达式上的整数溢出?
EN

Stack Overflow用户
提问于 2021-08-07 02:52:29
回答 1查看 72关注 0票数 0

我正在做leetcode问题,当我以某种方式计算两个大数的乘法时,我得到了溢出,但当我在我看来完全等价的代码中计算它时,没有溢出。

maxDiffHmaxDiffV都是非常大的整数。问题的答案是由7+(10^9)修改的这两个整数的乘法。

这段代码在乘法行处失败,并显示以下消息:

Line 60: Char 32: runtime error: signed integer overflow: 999999998 * 999999998 cannot be represented in type 'int' (solution.cpp)

SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior prog_joined.cpp:69:32

代码语言:javascript
复制
        long mod = pow(10,9)+7;
        long result = maxDiffV *maxDiffH;
        result = result % mod;
        return result;

虽然另一段代码运行良好

代码语言:javascript
复制
        long result = maxDiffH;
        result *= maxDiffV;
        long div = 1e9+7;
        result = result%div;
        return result;

我认为通过立即将maxDiffHmaxDiffV相乘在一行中计算结果将等同于更新结果。

有人能解释一下为什么一个版本可以工作而另一个版本不行吗?

EN

回答 1

Stack Overflow用户

发布于 2021-08-08 01:19:31

感谢评论中的每一个人。

这个问题的简单答案(正如注释中提到的)是,在第一个版本中,我将一对int变量相乘,编译器在将计算结果赋给我的变量result之前,尝试将其存储为int值(但未成功)。

第二种情况,相当于将maxDiffH类型转换为长整型并将其存储在result中,然后将长整型与int相乘,在更新变量之前将其临时存储为长整型。

我希望这对像我这样的新手有帮助:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68689049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档