作者:Aaron_涛

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

问题

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

琐碎时间想看一些技术文章,可以去公众号菜单栏翻一翻我分类好的内容,应该对部分童鞋有帮助。同时看的过程中发现问题欢迎留言指出,不胜感谢~。另外,有想多了解哪些方面内容的可以留言(什么时候,哪篇文章下留言都行),附菜单栏截图(PS:很多人不知道公众号菜单栏是什么)

END

我知道你 “在看”

Java如何判断整数溢出,溢出后怎么得到提示?相关推荐

  1. c++判断整数翻转溢出_LeetCode7.整数反转(Reverse Integer)

    7. 整数反转 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. 示例 1: 输入: 123输出: 321 示例 2: 输入: -123输出: -321 示例 3: 输入: 1 ...

  2. java确定一个整数是否溢出,java-判断一个整数是不是回文,考虑溢出

    java-判断一个整数是否回文,考虑溢出 public class PalindromeInt { /** * PalindromeInt,like 1,121,12321.... * you sho ...

  3. java float 判断整数_判断一个数是否是整数

    PS:在阅读本篇文章之前,最好先搞清楚: 1.数据类型在计算机内的存储方式: 2.数据类型在VC++或者GCC中的数值范围和精度. 如果对以上两点不清楚,请先阅读另一篇文章<计算机的数据存储及V ...

  4. 在Java中判断整数是素数还是合数 |CSDN创作

    int Number; boolean isNumber; Scanner sc = new Scanner(System.in); System.out.print("请输入整数:&quo ...

  5. html 判断整数,javascript如何判断值是否为整数?

    javascript如何判断一个值是否为整数?下面本篇文章就来给大家介绍一下使用javascript判断一个值是否为整数的方法,希望对大家有所帮助. 方法1:使用取余运算符判断 任何整数都会被1整除, ...

  6. Java内存区域与内存溢出异常

    Java内存区域与内存溢出异常 Java与C++之间有一堵由内存动态分配和垃圾收集技术围城的"高墙",墙外的人想进去,墙里的人却想出来 概述 对于C.C++程序开发人员来说,在内存 ...

  7. 《深入理解JAVA虚拟机》详细解读(第二章 ):JAVA内存区域与内存溢出异常

    目录 一.JAVA内存区域与内存溢出异常 1. 概述 2. 运行时数据区域 2.1 程序计数器 2.2 Java虚拟机栈 2.3本地方法栈 2.4 堆 2.5 方法区 2.6 运行时常量池 2.7直接 ...

  8. 图解Java内存区域及内存溢出异常

    图解 Java 内存区域及内存溢出异常 在阅读 <深入理解Java虚拟机:JVM高级特性与最佳实践(第2版) >后,为了加深对 Java 内存区域的印象及理解,特意做成了思维导图. 名词解 ...

  9. Java虚拟机——Java内存区域与内存溢出

    内存区域 Java虚拟机在执行Java程序的过程中会把他所管理的内存划分为若干个不同的数据区域.Java虚拟机规范将JVM所管理的内存分为以下几个运行时数据区:程序计数器.Java虚拟机栈.本地方法栈 ...

最新文章

  1. CentOS RPM安装MySQL 5.6修改默认密码
  2. python expect模块_成为顶级黑客--python绝技 阅读笔记(五)
  3. Python for Data Analysis
  4. 手动清除后门程序Iexplores.exe
  5. 计算机编程语言的分类与python语言快速度认识
  6. php 检测nfs状态,PHP和Shell实现检查SAMBA与NFS Server是否存在_php技巧
  7. Android 系统(136)---OTA 差分升级包的制作
  8. [Ubuntu16.04]Anaconda下运行jupyter notebook出现Running as root is not recommended.
  9. html页面酷炫,5个酷炫、实用的HTML标签和属性介绍
  10. spring配置数据源错误记录
  11. cocos2d-x 3.2线程安全的消息中心
  12. CMD 控制台中文乱码
  13. Ubuntu 软件安装方法(入门必看)
  14. 40 if 虚拟条件句(虚拟语气)假设现在
  15. 蛋白质二级结构预测Linux,哪些蛋白质二级结构预测软件可以批量使用?
  16. 关于散列表的大小设定
  17. [翻译]什么是Istio? 它是服务网格。棒极了,那什么是服务网格?
  18. 李烨_敏捷团队中QA角色的转变
  19. 杜克大学的计算机,杜克大学计算机
  20. git 加密_4个用于Git加密的秘密管理工具

热门文章

  1. 手机这5个反人类的设计,你能容忍到第几个?
  2. uboot的readme导读(转)
  3. 软件测试面试-测试的目的是什么?【高频】
  4. Redis作者谈Redis应用场景
  5. java求根号函数_一般实系数四次方程的一种求根公式与根的判别法则及其推导...
  6. python文件函数_Python closed()函数:关闭打开的文件
  7. 检测直线方法 python
  8. ftp加速传输java_Java FTPClient 大量数据传输的问题(未解决)
  9. Qt实践录:TCP网络调试助手
  10. 目前阶段的任务及计划