如何检测 32 位 int 的整数溢出?

2023-12-27

我知道这个话题已经被问过好几次了,但是我的问题是关于完整 32 位 int 的溢出。例如:

  11111111111111111111111111111111 +
  00000000000000000000000000000001 =
  00000000000000000000000000000000   //overflow!

I found topic https://stackoverflow.com/questions/199333/best-way-to-detect-integer-overflow-in-c-c对此有类似的问题,但是该算法并不完美。

  11111111111111111111111111111111 +
  00000000000000000000000000000000 =
  00000000000000000000000000000000  //overflow!

有没有简单、快速、安全的方法来检查呢?


Math.addExact溢出时抛出异常

从 Java 8 开始,有一组方法Math https://docs.oracle.com/javase/8/docs/api/java/lang/Math.html class:

  • toIntExact(long) https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Math.html#toIntExact(long)
  • addExact(int,int) https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Math.html#addExact(int,int)
  • subtractExact(int,int) https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Math.html#subtractExact(int,int)
  • multiplyExact(int,int) https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Math.html#multiplyExact(int,int)

……还有很长的版本。

这些方法中的每一个都会抛出ArithmeticException https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/ArithmeticException.html如果发生溢出。否则,如果结果在范围内,它们就会返回正确的结果。

添加示例:

int x = 2_000_000_000;
int y = 1_000_000_000;
try {
    int result = Math.addExact(x, y);
    System.out.println("The proper result is " + result);
} catch(ArithmeticException e) {
    System.out.println("Sorry, " + e);
}

看到这个代码在 IdeOne.com 上实时运行 https://ideone.com/cAlYwX.

抱歉,java.lang.ArithmeticException:整数溢出

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何检测 32 位 int 的整数溢出? 的相关文章

随机推荐

  • 为什么 npm install 仅在 ElasticBeanstalk 中失败?

    我有一个 Nest js Node js 应用程序 我想将其部署在 ElasticBeanstalk Node 16 版本 AL2 5 5 0 上 我的部署一直失败 我发现错误在eb engine log 2022 03 23 15 11
  • “const int& jj”和“int& const jj”有什么区别?

    我对两者感到困惑 我知道 C 引用本质上是恒定的 一旦设置它们就不能更改为引用其他内容 const int 表示对 const 的引用int 相似地 int 表示对非常量的引用int int const字面意思是 const 引用 对非 c
  • Android:使用媒体播放器播放本地视频

    我正在尝试播放我在项目中保存的视频 我有下载this http camendesign co uk code video for everybody test html 一个 mp4 测试视频 然后在我的项目中创建了一个名为 vid 的文件
  • Cordova - 命令错误代码 1 |命令失败的时间为

    我是科尔多瓦的新手 所以如果我的问题不相关 请原谅我 我的 Windows 7 x64 机器中有一个 cordova 项目 昨天我通过构建我的科尔多瓦应用程序cordova build android release 但我需要添加新插件co
  • 创建直方图 OCaml

    我的任务是创建一个直方图 输出某个元素在列表中出现的次数 Input 2 2 2 3 4 4 1 Output 2 3 2 2 2 1 3 1 4 2 4 1 1 1 Expected output 2 3 3 1 4 2 1 1 My c
  • YARN 中应用程序管理器和应用程序主控之间的区别?

    我了解 MRv1 的工作原理 现在我试图了解 MRv2 YARN 中的应用程序管理器和应用程序主控之间有什么区别 应用程序主控和应用程序管理器这两个术语通常可以互换使用 实际上 Application Master 是请求 启动和监视应用程
  • 使用 moment.js 将日期转换为字符串“MM/dd/yyyy”

    我需要从 jquery datepicker 中获取日期值 将其转换为字符串格式 MM dd yyyy 以便它可以执行正确的 ajax post 当页面加载或更改日期选择器时 将进行 jquery ajax 调用 我有这个代码 var sT
  • 以编程方式在 WSO2 API Manager 中添加自定义处理程序

    我通过使用 WSO2 API Manager 的自动化流程创建和订阅新的 API出版商 https docs wso2 com display AM190 Publisher APIs and Store https docs wso2 c
  • 识别与给定字符串向量匹配的列索引

    我有一个字符串向量 x lt c a b 我有一个多列矩阵 其中包含该字符串向量中的名称 我想获取与其名称匹配的列号 索引 which colnames sample matrix x 当 x 不是向量而是单个元素时 上面的方法有效 有什么
  • 长整数中单个位的索引(在C中)[重复]

    这个问题在这里已经有答案了 我试图找到一个最佳代码来定位长整数 64 位 中的单个位索引 长整数只有一位设置位 使用C语言 目前 我只是将整个事情移动一位 然后检查零 我读过有关查找表的内容 但它不适用于整个 64 位 我考虑过检查每个 8
  • 将回调方法实现转换为 akka 流源

    我正在与我无法控制的 java 库中的数据发布者合作 发布者库使用典型的回调设置 库代码中的某处 该库是java的 但为了简洁起见 我将在scala中进行描述 type DataType trait DataConsumer def onD
  • 从 AppDelegate 重新加载 tableView

    我有一个非常简单的问题 但我仍在寻找可可的方法 我有一个在 Xcode 中创建的普通 rootViewController 应用程序 在 AppDelegate 中 我有一个更新数据库的函数 当运行时收到推送消息时 didReceiveRe
  • exp init 项目 [11:31:26] zlib:文件意外结束

    当我跑步时exp init Locations它给了我这个错误 npm 6 1 0 exp 55 04 正如 Mandan 所描述的 您还可以导航至 userprofile expo starter app cache文件夹删除blank
  • 如何对占数据 50% 的条形进行着色?

    我正在为一些数据点绘制直方图 其中条形高度是该数据点占整个数据的百分比 x normal size 1000 hist bins np histogram x bins 20 plt bar bins 1 hist astype np fl
  • 从 MS-SQL Server 2008 中的 XML 字段提取值

    我试图从存储在单个 XML 字段中的 MS SQL Server 2008 数据库中提取四条信息 这是我第一次使用 XML 所以我遇到了一些麻烦 这就是为什么我只有要提取的数据 我尝试过使用其他帖子来解决我的问题 但显然没有运气 这四个信息
  • Fiddler 未捕获来自 .Net Core 的流量

    我有一个控制台应用程序 它通过 HTTP HTTPS 调用许多第三方服务 这些服务最初是为在 Net Framework 下运行而编写的 Fiddler 与该版本的应用程序配合良好 捕获所有 HTTP 和 HTTPS 流量 我将应用程序移植
  • Tomcat Jersey Eclipse ClassNotFound org.glassfish.jersey.servlet.ServletContainer

    我正在运行你好世界 http www mkyong com webservices jax rs jersey hello world example 例子 不过我用的是2 7版本 在 maven pom xml 我有
  • 将 symfony 与 postgresql 结合使用

    我正在尝试使用 Symfony 和 PostgreSQL 创建一个网站 我找不到任何说明如何执行此操作的文档 所有文档都假设后端数据库是 mySQL 有人知道该怎么做吗 如果您使用 Doctrine 只需在您的databases yml 中
  • 检测和重定向 SNI 支持的浏览器的最有效代码是什么?

    说吧 我有一个网站mywebsite com 使用 Apache Httpd 托管 现在我想要的是 每当任何用户输入mywebsite com or www mywebsite com如果浏览器支持 SNI 那么它应该重定向到https w
  • 如何检测 32 位 int 的整数溢出?

    我知道这个话题已经被问过好几次了 但是我的问题是关于完整 32 位 int 的溢出 例如 11111111111111111111111111111111 00000000000000000000000000000001 000000000