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,一经查实,立即删除!

相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

前端图片上坐标连线_前端图形学(十三)——弹跳运动的深入之傲娇的小球

欢迎来到【畅哥聊技术】前端图形学相关技术文章&#xff0c;更多精彩内容持续更新中,敬请关注。前面我们说到了小球的弹跳运动&#xff0c;通过一个方向的加速度和摩擦力去影响小球的动画&#xff0c;其目标点也是一个固定不变的&#xff0c;似乎有些单调。那么我们今天继续小球…

服务器微信了早上好,微信早晨好问候语句动态图片 早上好发给朋友的微信早安问候语简短...

原标题&#xff1a;微信早晨好问候语句动态图片 早上好发给朋友的微信早安问候语简短嘀嘀嘀嘀&#xff0c;我的短信到啦。用关心方式&#xff0c;要你多注意休息&#xff1b;用体贴方式&#xff0c;要你轻松而快乐&#xff1b;用祝福方式&#xff0c;要你一切都过的好&#xff…

c语言调用createthread线程的头文件_易语言API多线程总汇

【thread】 即&#xff0c;线程&#xff0c;是进程中某一顺序的控制流&#xff0c;在单个程序中同时运行多个线程完成不同工作&#xff0c;称为多线程。易语言多线程理解&#xff1a;进程是一个可执行程序&#xff0c;由私有虚拟地址空间、代码、数据和其它操作系统资源组成&am…

oracle varchar默认长度_面试官:如何精确计算mysql数据库索引长度?

概述我们知道MySQL Innodb 对于索引长度的限制为 767 字节&#xff0c;并且UTF8mb4字符集是4字节字符集&#xff0c;则 767字节 / 4字节每字符 191字符(默认索引最大长度)&#xff0c;所以在varchar(255)或char(255) 类型字段上创建索引会失败&#xff0c;提示最大索引长度为7…

android things 系统镜像文件_开始菜单搬家!Win 10X 系统 UI 全部重做,明年初就能用上...

不知道老伙计们还记不记得&#xff0c;小淙曾经报道过三次&#xff0c;关于微软新系统 Windows 10X 的消息。当时很多老伙计感觉太遥远&#xff0c;或者觉得它难以激起波澜。但现在看来微软布局已久&#xff0c;是铁了心要搞新系统了。因为 Windows 10X 系统已经准备好交付&…

通达信公式大全_通达信MACD金叉的选股公式大全

公式来源于网络&#xff0c;我只是用其中一个&#xff0c;一起复制来了&#xff0c;有需要的自取吧。1、0轴上方第一次金叉选股公式&#xff1a;DIFF:EMA(CLOSE,12) - EMA(CLOSE,26);DEA : EMA(DIFF,9);MACD : 2*(DIFF-DEA);xg:cross(diff,dea) and dea>-1.0 and dea<0.5…

mysql 时间差_后端从mysql取值返回0时区时间数据的问题

近日搞一个B/S项目&#xff0c;前端页面时间字段总是显示格林威冶时间&#xff0c;也就是0时区的时间&#xff0c;比北京时间差了8个小时。打开后台的数据库&#xff0c;在workbench中查询&#xff0c;结果显示的时间格式正常&#xff0c;为当前北京时间。该时间字段是在往数据…

abap视图字段限制_【第八章】视图

上一级目录&#xff1a;Mosh_完全掌握SQL课程_学习笔记 其它相关&#xff1a;数据概要【第八章】视图Views (时长18分钟)1. 创建视图Creating Views (5:36)小结就是创建虚拟表&#xff0c;自动化一些重复性的查询模块&#xff0c;简化各种复杂操作&#xff08;包括复杂的子查询…

生活质量衡量系统_数据质量与数据质量八个维度指标

数据质量与数据质量八个维度指标数据的质量直接影响着数据的价值&#xff0c;并且直接影响着数据分析的结果以及我们以此做出的决策的质量。质量不高的数据不仅仅是数据本身的问题&#xff0c;还会影响着企业经营管理决策&#xff1b;错误的数据还不如没有数据&#xff0c;因为…

linux的内置的账户_6 款面向 Linux 用户的开源绘图应用程序

既然你是一名 Linux 用户&#xff0c;为什么不关注一下开源绘图应用程序呢&#xff1f;-- Ankush Das(作者)小时候&#xff0c;当我开始使用计算机(在 Windows XP 中)时&#xff0c;我最喜欢的应用程序是微软的“画图”。我能在它上面涂鸦数个小时。出乎意料&#xff0c;孩子们…

ieda ts文件报错_使用TS开发微信小程序(1):环境搭建——VSCode+TS

前言现在接到小程序需要改版的需求&#xff0c;由于使用Ionic的经验&#xff0c;希望以后能够统一开发语言降低开发成本&#xff0c;所以想使用TypeScript进行开发。开发前准备工作先是看官网&#xff0c;在微信小程序的官方开发文档中找到TypeScript相关的支持介绍。微信官网描…

cad统计多条线段总长度插件_超级实用CAD技巧应用汇总!技巧大全、插件合集、快捷键合集等...

超级实用CAD技巧应用汇总&#xff01;技巧大全、插件合集、快捷键合集等各位朋友&#xff0c;CAD福利来啦&#xff01;超级实用CAD技巧应用汇总&#xff0c;千万不能错过&#xff01;有技巧大全、插件合集、快捷键合集、字体大全、常用图库大全、常见问题及解决办法、版本转换&…

局部放大_Origin教程|巧用ZOOM功能做数据对比和快速绘制局部放大图

微信公众号&#xff1a;有宝物的柜子编辑&#xff1a;落水无波2020-06-28 原创有时候在分析一些数据时&#xff0c;既需要观察整体又需要局部观测&#xff0c;那么怎么才能做到同时查看呢&#xff0c;就类似上面这样。这样就很容易的去发现有没有峰位偏移&#xff0c;同时查看与…