java 加法 溢出_StackOverflow热帖:Java整数相加溢出怎么办?Java8一步搞定~

阅读本文大概需要 2 分钟。

作者:Aaron_涛

问题

在之前刷题的时候遇见一个问题,需要解决int相加后怎么判断是否溢出,如果溢出就返回Integer.MAX_VALUE

解决方案

JDK8已经帮我们实现了Math下,不得不说这个方法是在StackOverflow找到了的,确实比国内一些论坛好多了~

加法

public static int addExact(int x, int y) {

int r = x + y;

// HD 2-12 Overflow iff both arguments have the opposite sign of the result

if (((x ^ r) & (y ^ r)) < 0) {

throw new ArithmeticException("integer overflow");

}

return r;

}

减法

public static int subtractExact(int x, int y) {

int r = x - y;

// HD 2-12 Overflow iff the arguments have different signs and

// the sign of the result is different than the sign of x

if (((x ^ y) & (x ^ r)) < 0) {

throw new ArithmeticException("integer overflow");

}

return r;

}

乘法

public static int multiplyExact(int x, int y) {

long r = (long)x * (long)y;

if ((int)r != r) {

throw new ArithmeticException("integer overflow");

}

return (int)r;

}

注意 long和int是不一样的

public static long multiplyExact(long x, long y) {

long r = x * y;

long ax = Math.abs(x);

long ay = Math.abs(y);

if (((ax | ay) >>> 31 != 0)) {

// Some bits greater than 2^31 that might cause overflow

// Check the result using the divide operator

// and check for the special case of Long.MIN_VALUE * -1

if (((y != 0) && (r / y != x)) ||

(x == Long.MIN_VALUE && y == -1)) {

throw new ArithmeticException("long overflow");

}

}

return r;

}

如何使用?

直接调用是最方便的,但是为了追求速度,应该修改一下,理解判断思路,因为异常是十分耗时的操作,无脑异常有可能超时

写这个的目的

总结一下,也方便告诉他人Java帮我们写好了函数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/346087.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

通过这5个简单的技巧减少GC开销

编写代码的五种简单方法&#xff0c;可提高内存效率&#xff0c;而无需花费更多时间或降低代码可读性 垃圾回收会为您的应用程序增加多少开销&#xff1f; 您可能不知道确切的数字&#xff0c;但您确实知道总有改进的余地。 尽管自动GC是最有效的过程&#xff0c;但是如果它过…

xml 数字签名 破解_JAVA中带有数字签名的XML安全性

xml 数字签名 破解介绍 如您所知&#xff0c;XML在我们的产品或项目开发中起着重要作用&#xff0c;并且从XML文档中我们收集了很多信息&#xff0c;并且我们可以对XML文件执行CRUD操作。 但是&#xff0c;关于如何确保XML文件中可用的数据是真实的以及数据来自受信任的可靠来源…

centos 远程安装java程序_centos7远程服务器中redis的安装与java连接

1.下载安装redis在远程服务器中你想下载的位置执行以下命令来下载redis文件到服务器中$ wget http://download.redis.io/releases/redis-4.0.9.tar.gz说明&#xff1a;$是指你的当前目录&#xff0c;不是命令的一部分&#xff0c;wget命令用来下载网上资源&#xff0c;后面的地…

内部简单二进制编码(SBE)

SBE是用于金融行业的非常快速的序列化库&#xff0c;在本博客中&#xff0c;我将介绍一些使其快速发展的设计选择。 序列化的全部目的是对消息进行编码和解码&#xff0c;并且有很多可用的选项&#xff0c;从XML&#xff0c;JSON&#xff0c;Protobufer&#xff0c;Thrift&…

mingw64 下 java_在 Windows 10 64 位下安装 Mingw-w64

1、MinGW 的全称是&#xff1a;Minimalist GNU on Windows 。打开网址&#xff1a;http://www.mingw-w64.org/doku.php/download &#xff0c;选择 MingW-W64-builds。如图1图12、下载包名&#xff1a;mingw-w64-install.exe。安装时报错&#xff1a;Cannot download repositor…

java实现layui分页_layui如何实现数据分页功能

我们先来看下官网的演示画面。具体代码&#xff1a;页面引入layui.css、 layui.js前台jsvar limitcount 10;var curnum 1;//列表查询方法function productsearch(productGroupId,start,limitsize) {layui.use([table,laypage,laydate], function(){var table layui.table,la…

java 正则表达式使用_如何用正则表达式杀死Java

java 正则表达式使用我们最近偶然发现了一个我们绝对不了解的现象&#xff1a;您可以使用简单的正则表达式杀死任何Java IDE以及任何Java进程… 回到大学后&#xff0c;我被告知正则表达式&#xff08;称为正则语法或3型语法&#xff09;总是以有限状态的自动机结束&#xff0…

java 合并到一行_mysql中将多行数据合并成一行数据

一个字段可能对应多条数据&#xff0c;用mysql实现将多行数据合并成一行数据例如&#xff1a;一个活动id(activeId)对应多个模块名(modelName),按照一般的sql语句&#xff1a;1 SELECT am.activeId,m.modelName2 FROM activemodel am3 JOIN model m4 ON am.modelId m.modelId5…

容器化Spring Data Cassandra应用程序

我正在继续学习Docker的旅程。 在这一点上&#xff0c;我仍然保持简单。 这次&#xff0c;我将解决将Spring和Cassandra应用程序转换为使用容器而不是在主机上本地运行的问题。 更准确地说&#xff0c;使用Spring Data Cassandra整理应用程序。 我希望我前几天看过进行此更改。…

最快的 java 图像_ImageJ 1.53 世界上最快的Java图像处理程序

ImageJ 1.53 世界上最快的Java图像处理程序 已通过小编安装运行测试 100%可以使用。ImageJ 1.53 是世界上最快的纯Java图像处理程序。它可以在0.1秒内过滤2048x2048图像。每秒可以处理4000万像素的图片。ImageJ支持处理8位灰度或索引颜色&#xff0c;16位无符号整数&#xff0c…

java字节码提取if语句_终于找到了!有了它你就可以读懂字节码了!

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼0x80 ior 将栈顶两int型数值作“按位或”并将结果压入栈顶0x81 lor 将栈顶两long型数值作“按位或”并将结果压入栈顶0x82 ixor 将栈顶两int型数值作“按位异或”并将结果压入栈顶0x83 lxor 将栈顶两long型数值作“按位异或”并将结…

maven设置代理服务器_使用Maven设置您的应用服务器

maven设置代理服务器在许多情况下&#xff0c;无需事先设置应用程序就无法部署应用程序。 在JBoss AS 7.x中&#xff0c;您可能需要配置例如数据库连接。 或者&#xff0c;您必须配置一个安全领域。 也许您还想调整SLSB池…在任何情况下&#xff0c;团队中的所有开发人员都必须…

java编程中的di是什么_java-在Spring IoC / DI中使用@Component注释对接口...

在Spring类中,通常使用Component注释接口,特别是对于某些Spring构造型注释&#xff1a;package org.springframework.stereotype;...Componentpublic interface Service {...}要么 &#xff1a;package org.springframework.boot.test.context;...Componentpublic interface Te…

使用React和Spring Boot构建一个简单的CRUD应用

“我喜欢编写身份验证和授权代码。” 〜从来没有Java开发人员。 厌倦了一次又一次地建立相同的登录屏幕&#xff1f; 尝试使用Okta API进行托管身份验证&#xff0c;授权和多因素身份验证。 React的设计使创建交互式UI变得轻松自如。 它的状态管理非常有效&#xff0c;并且仅在…

java初始化该字符串值_java字符串数组初始化和赋值

//一维数组String[] str new String[5]; //创建一个长度为5的String(字符串)型的一维数组String[] str new String[]{“”,””,””,””,””};String[] str {“”,””,””,””,””};String数组初始化区别首先应该明白java数组里面存的是对象的引用&#xff0c;所以必…

java 无法找到ant_Java-Ant需要tools.jar并且无法找到我

Java-Ant需要tools.jar并且无法找到我我将一个Java程序的开发环境放在一起&#xff0c;并且在第一次尝试使用Ant构建脚本后&#xff0c;出现了以下错误&#xff1a;Unable to locate tools.jar. Expected to find it in /usr/lib/jvm/java-6-openjdk/lib/tools.jar虽然通往jdk的…

js实现日历框上一日下一日_一日三项令人兴奋的Lucene功能

js实现日历框上一日下一日昨天是富有成效的一天&#xff1a;突然&#xff0c;Lucene有了三个令人兴奋的新功能。 表达式模块 昨天提交的第一个功能是新的expressions模块 。 这使您可以使用任意String表达式定义用于排序的动态字段。 内置了对JavaScript解析的支持&#xff0c…

使用CUBA进行开发–是Spring的重大转变吗?

阅读另一个供内部公司使用的Web项目的要求时&#xff0c;您&#xff08;至少是我自己&#xff09;通常会看到一个很普通的集合&#xff1a;定义明确的数据存储结构&#xff08;或有时是现有的旧式DB&#xff09;&#xff0c;大量的数据输入形式&#xff0c;非常复杂的业务逻辑&…

java 伴随矩阵_C#计算矩阵的逆矩阵方法实例分析

本文实例讲述了C#计算矩阵的逆矩阵方法。分享给大家供大家参考。具体如下&#xff1a;1.代码思路1)对矩阵进行合法性检查&#xff1a;矩阵必须为方阵2)计算矩阵行列式的值(Determinant函数)3)只有满秩矩阵才有逆矩阵&#xff0c;因此如果行列式的值为0(在代码中以绝对值小于1E-…

apache camel_探索Apache Camel Core –文件组件

apache camel文件轮询器是解决常见IT问题的非常有用的机制。 Camel的内置file组件非常灵活&#xff0c;并且有许多选项可用于配置。 让我们在这里介绍一些常用用法。 轮询目录以输入文件 这是一条典型的骆驼Route用于每秒轮询一次目录以查找输入文件。 import org.slf4j.*; i…