StackOverflow热帖: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 resultif (((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 xif (((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 * -1if (((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
猜你喜欢
1、2019 年 9 月全国程序员工资统计,你是什么水平?
2、如何才能成为优秀的架构师?
3、从零开始搭建创业公司后台技术栈
4、程序员一般可以从什么平台接私活?
5、37岁程序员被裁,120天没找到工作,无奈去小公司,结果懵了...
6、滴滴业务中台构建实践,首次曝光
7、不认命,从10年流水线工人,到谷歌上班的程序媛,一位湖南妹子的励志故事
8、15张图看懂瞎忙和高效的区别!
StackOverflow热帖:Java整数相加溢出怎么办?Java8一步搞定~相关推荐
- StackOverflow热帖:Java整数相加溢出怎么办?
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | Aaron_涛 来源 | blog.csdn. ...
- java 加法 溢出_StackOverflow热帖:Java整数相加溢出怎么办?Java8一步搞定~
阅读本文大概需要 2 分钟. 作者:Aaron_涛 问题 在之前刷题的时候遇见一个问题,需要解决int相加后怎么判断是否溢出,如果溢出就返回Integer.MAX_VALUE 解决方案 JDK8已经帮 ...
- unsigned long long 溢出 乘_Java整数相加溢出怎么办?Java8一步搞定
问题 在之前刷题的时候遇见一个问题,需要解决int相加后怎么判断是否溢出,如果溢出就返回Integer.MAX_VALUE 解决方案 JDK8已经帮我们实现了Math下,不得不说这个方法是在Stack ...
- 【源码+图片素材】Java王者荣耀游戏开发_开发Java游戏项目【王者荣耀】1天搞定!!!腾讯游戏_Java课程设计_Java实战项目_Java初级项目
王者荣耀是当下热门手游之一,小伙伴们是否想过如何制作一款属于自己的王者荣耀游戏呢? 本课程讲解了一个王者荣耀游戏的详细编写流程,即使你是刚入门Java的新手,只要你简单掌握了该游戏所需要的JavaSE ...
- JAVA微信企业付款到零钱(十分钟搞定),附完整DEMO下载
最近帮朋友做了一个简单的微分销系统,实现从企业付款到零钱分润的功能,简单记录一下微信提现功能开发的流程, 主要就是按规则封装好请求参数调用微信接口,涉及一些签名校验: A.接口流程 获取用户OPENI ...
- java粒子特效_程序员20分钟搞定粒子效果, 仅仅200行代码
原标题:程序员20分钟搞定粒子效果, 仅仅200行代码 这粒子的打造,确实没有布局代码,稍后大家在源码上可以看到,css代码都只有几行,绝大部分代码都是java代码,而且是原生java书写的,现在很多 ...
- Java原来还可以这么学:如何搞定面试中必考的集合类
原创声明 本文作者:黄小斜 转载请务必在文章开头注明出处和作者. 系列文章介绍 本文是<五分钟学Java>系列文章的一篇 本系列文章主要围绕Java程序员必须掌握的核心技能,结合我个人三年 ...
- sql 相加_Java整数相加溢出怎么办?Java 8 还是厉害!
作者:Aaron_涛 blog.csdn.net/qq_33330687/article/details/81626157 问题 在之前刷题的时候遇见一个问题,需要解决int相加后怎么判断是否溢出,如 ...
- 如何检测整数相加溢出
if(sum>Int32.MaxValue-b) { throw new OverflowExceptio ...
- java 快排_八大排序-快速排序(搞定面试之手写快排)
概要 快速排序由C. A. R. Hoare在1960年提出,是八大排序算法中最常用的经典排序算法之一.其广泛应用的主要原因是高效,核心算法思想是分而治之.快速排序经常会被作为面试题进行考察,通常的考 ...
最新文章
- 动态语言,静态类型,强类型定义语言,弱类型定义语言,
- 45个案例一一破解win32k.sys蓝屏
- 2022-01-06
- quill鼠标悬浮 出现提示_外设报道——DELUX多彩M618X垂直鼠标颠覆创新
- java线程死亡_Java模因拒绝死亡
- landscape 1
- SpringMVC入门实例及详细讲解
- Oracle SQL 模拟MySQL的inet_aton()和inet_ntoa()
- python爬取美女图片_Python 爬取美女图片
- 2015年仿团800首页视频教程
- STM32第二十一课(USB SLAVE, HAL)
- 在pc电脑上使用地图(百度地图、高德地图等),地图软件是怎么获取pc电脑的所在位置的?
- SAP系统中的几种系统级消息(用户登录后消息弹窗SM02,TH_POPUP,以及系统邮件)
- (附源码)springboot跨境电商系统 毕业设计 211003
- 设置允许远程连接数据库
- CSDN 自定义博客栏目
- 采用EM算法对高斯混合模型(GMM)进行参数估计
- quantenna测试RF射频性能简单说明
- javah 类com.xxxx.xxxx 找不到问题解决方法
- android飞行射击游戏代码,android 3D飞行射击游戏《夜鹰行动》源码
热门文章
- HttpServletRequest小结
- BZOJ2337:[HNOI2011]XOR和路径——题解
- 【设计模式】建造者模式(生成器模式)
- TCP/UDP,SOCKET,HTTP,FTP 简析
- cannot register datanode 0.0.0.0:1002,because current license expired time is
- 自定义实现js的confirm方法
- JAVA B/S系统实现客户端屏幕截图,Java版的QQ截图
- Objective-c:NSString的常用方法
- android中颜色对应的值
- Axure RP 8 for Mac(交互式原型设计工具)汉化版