unsigned long long 溢出 乘_Java整数相加溢出怎么办?Java8一步搞定

问题

在之前刷题的时候遇见一个问题,需要解决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帮我们写好了函数。

Aaron_涛

blog.csdn.net/qq_33330687/article/details/81626157

6db9d233bed83d884a9935779b74dc23.png

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

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

相关文章

计算机模块word2003和2007,以Word2003的名义熟悉Word2007

相信很多朋友都已经用上了最新的Office2007办公套件&#xff0c;Office2007提供了全新的外观、全新的用户界面&#xff0c;用简单明了的单一机制取代了早期版本中的菜单、工具栏和大部分的任务窗格&#xff0c;从而使用户可以更高效、更容易地找到完成各种任务的合适功能&#…

golang python rpc_golang rpc的两种调用方法

golang的rpc有两种方法进行调用&#xff0c;一种是rpc例子中给的&#xff1a;package mainimport ("net/rpc""net/http""log""net""time")type Args struct {A, B int}type Arith intfunc (t *Arith) Multiply(args *Args, …

二级计算机vf里的sql,计算机等级考试二级VF考点:SQL语言

第4章SQL语言(数据查询)一、投影&#xff1a;SELECT 字段 FROM 表名题目&#xff1a;1. 对职工表进行查询&#xff0c;显示职工的职工号。2. 对职工表进行查询&#xff0c;显示所有信息(即所有字段)。二、选择&#xff1a;SELECT 字段 FROM 表名 WHERE 条件题目&#xff1a;3. …

setstate是同步还是异步_谈谈 IO模型:同步、异步、阻塞、非阻塞

同步/异步、阻塞/非阻塞 说的是一回事儿吗&#xff1f;同步/异步、阻塞/非阻塞 你能通俗易懂的讲清楚吗&#xff1f;Java 中的 BIO、NIO、AIO 你了解吗&#xff1f;Socket 编程你还会吗&#xff1f;Linux 操作系统的 IO 模型你能讲讲吗&#xff1f;01. 生活中的同步/异步、阻塞…

tp获取referer里的域名_thinkPHP的redirect跳转和referer使用的问题

如果从Topic/topic页面跳转到Login/login页面 使用$_SERVER[HTTP_REFERER]后再login页面出来的地址是这样的http://localhost/a/jz/index.php/Home/topic/topic&#xff0c;这个地址没错&#xff0c;为什么我使用redirect跳转后地址栏上的地址就变成了这样http://localhost/a/j…

软件测试要求太高,软件“故障门”频现 对软件测试提出更高要求

随着信息化时代的到来&#xff0c;各行各业已离不开各类应用软件&#xff0c;可是频频爆出的软件“故障门”却成为企业发展的“拦路虎”。为了解决“故障门”&#xff0c;众多IT企业不得不加大软件测试领域的投入&#xff0c;有的试图培养高水平的测试团队&#xff0c;有的则希…

md5会重复吗_如何优雅地处理重复请求(并发请求)

点击上方“服务端思维”&#xff0c;选择“设为星标”回复”669“获取独家整理的精选资料集回复”加群“加入全国服务端高端社群「后端圈」利用唯一请求编号去重你可能会想到的是&#xff0c;只要请求有唯一的请求编号&#xff0c;那么就能借用Redis做这个去重——只要这个唯一…

初学者选黑卡还是微单_3500以内的微单相机好用吗?值得初学者入手吗?

2000--3000元的相机还是有一定使用价值的&#xff0c;如果你是拿来学习摄影&#xff0c;这些相机还是足够用的。我们按照京东自营的价格&#xff0c;来搜一下3500块钱以内的微单无反相机&#xff0c;看看有哪些值得入手的。索尼ILCE6000套机今年最低价3198佳能EOS M6一代套机今…

计算机二级excel数据有效性,原来Excel数据有效性还可以这样做——制作二级下拉菜单...

很多时候&#xff0c;在进行设置数据有效性时&#xff0c;我们希望可以根据前一单元格的内容&#xff0c;使用动态的数据选项。如下图为一个员工信息表&#xff0c;现希望在F列制作下拉列表&#xff0c;下拉列表的内容根据E列输入的省份变化而变化&#xff0c;如在E2单元格中输…

python 模块 包 库_模块(包、库)

模块的基本概念&#xff1a;模块是程序&#xff0c;它就是一个扩展名为.py的python程序。因此对于一个.py的python文件而言&#xff0c;既可以把它当作程序来执行&#xff0c;也可以将它作为模块引入。导入一个模块时&#xff0c;python解释器会先自动在当前路径下搜索要导入的…

计算机网络课设题目java_java课程设计参考题目

参考题目选题原则&#xff1a;所完成的系统应能够在生活、学习中使用&#xff0c;以实用性为主。模仿生活、学习中使用到的各种软件&#xff0c;做mini版本。开发的目标是自己、同学愿意使用你所开发的软件完成一些简单任务。从小功能着手&#xff0c;一点点的添加功能。添加一…

win7系统安装信息服务器不可用怎么办,Win7系统下iis服务器应用程序不可用怎么办?...

Win7系统用户在使用电脑系统时都有自带可以方便用户们搭建网站的iis服务器。不过也有Win7系统用户反映在电脑系统里添加或删除组件时iis服务器无法添加&#xff0c;还弹跳出了应用程序不可用的提示窗口&#xff0c;这使用户非常苦恼&#xff0c;那么Win7系统下iis服务器应用程序…

python协同过滤电影推荐_基于协同过滤的电影推荐系统的设计与实现

龙源期刊网http://www.qikan.com.cn基于协同过滤的电影推荐系统的设计与实现作者&#xff1a;张玉叶

++ 多核cpu 并行_一文读懂什么是多核并行计算(三)

导读&#xff1a;面向应用工程师的商业软件咨询、自研软件定制开发服务的仿真公众号&#xff0c;点击关注进入菜单&#xff0c;查看更多精彩内容。(三)如何实现多核并行计算呢&#xff1f;了解了多核、多Machine、多Rack后&#xff0c;我可以看一下软件(程序)是如何对这些资源进…

诺禾致源css客户端,诺禾,诺禾致源:CSS 基础教学

伦多星报 2020-07-06 17:14:58Applying CSS and JavaScript to HTML当今您将使用的几乎所有网站都将使用CSS使它们看起来很酷&#xff0c;并使用JavaScript来支持交互式功能&#xff0c;例如视频播放器&#xff0c;地图&#xff0c;游戏等. 这些最常分别使用元素和元素应用于网…

python 文档操作_Python 文件操作

一. Python 读写 创建文件Python中对文件,文件夹(文件操作函数)的操作需要涉及到OS 模块和 shutil 模块 .一) . OS模块 的基本操作方法功能os.getcwd()得到当前工作目录,及当前Python脚本工作的目录路径os.listdir()返回指定目录下的所有文件和目录名:os.remoce()函数用来删除一…

vc读取北通手柄按键_《噬血代码》手柄怎么操作 北通手柄按键功能详解

噬血代码手柄怎么操作&#xff1f;应该很多朋友都还不是很清楚吧&#xff0c;所以呢小编今天给大家带来的就是噬血代码北通手柄按键功能详解&#xff0c;需要的朋友不妨进来看看。北通手柄按键功能详解游戏介绍本作是由《噬神者》的开发团队带来的完全新作&#xff0c;是迷宫探…

服务器放行6in4协议,最简单的接入IPv6网络的方法 – 6in4隧道

很多大学的校园网启用了IPv6&#xff0c;并且建设了很多IPv6专享的资源。毕业离校&#xff0c;由于现在的网络运营商绝大部分尚未支持IPv6&#xff0c;所以那些资源也就离我们远去了。机缘巧合之下&#xff0c;我知道了&#xff0c;原来我们可以这样接入IPv6网络。目前接入IPv6…

python自动寻路模板_Python实现的简单模板引擎功能示例

本文实例讲述了Python实现的简单模板引擎功能。分享给大家供大家参考&#xff0c;具体如下&#xff1a;#coding:utf- 8__author__"sdm"__author_emailsdmzhu3gmail.com__date__ "$2009-8-25 21:04:13$" pytpl 类似 php的模板类 import sysimport StringIOi…

梦幻群侠传5帮派修炼_梦幻西游:2020年十大更新回顾 法连不秒空和连续战斗修复...

今年梦幻西游有过很多重大的维护更新&#xff0c;其中不少更新都对玩家产生中重大的影响&#xff0c;比如说法术连击第二下不会秒空气&#xff0c;以及副本的迭代等等&#xff0c;今天就来盘点下2020年梦幻西游的十大更新!一、各类副本优化迭代今年优化了多个副本&#xff0c;如…