作者: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 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;}

如何使用?

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

推荐阅读


代码对比工具,我就用这6个

分享我常用的5个免费的在线 SQL 数据库环境,简直太方便了!

Spring Boot 三招组合拳,手把手教你打出优雅的后端接口

MySQL 5.7 vs 8.0,你选那个?网友:我继续原地踏步~

最后,推荐给大家一个有趣有料的公众号:写代码的渣渣鹏,7年老程序员教你写bug,回复 面试|资源 送一你整套开发笔记 有惊喜哦

扫码关注

sql 相加_Java整数相加溢出怎么办?Java 8 还是厉害!相关推荐

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

    问题 在之前刷题的时候遇见一个问题,需要解决int相加后怎么判断是否溢出,如果溢出就返回Integer.MAX_VALUE 解决方案 JDK8已经帮我们实现了Math下,不得不说这个方法是在Stack ...

  2. 【Java】算法积累1——大整数相加

    算法刚刚入门,每次记录下自己所学的知识总结以及理解,希望能够帮助大家,如有内容有错误或可改进的地方,欢迎一起探讨,一起进步,在此也要感谢WYSCODER学长给我的学习建议 目录 方法一: 思路: 代码 ...

  3. 两个整数相加减是否溢出

    #include<stdio.h> #include<stdint.h>// 两个整数相加减,没有溢出时返回0 int tadd_ok(int x, int y) {int s ...

  4. 编写一个Java应用程序,从键盘读取用户输入两个字符串,并重载3个函数分别实现这两个字符串的拼接、整数相加和浮点数相加。要进行异常处理,对输入的不符合要求的字符串提示给用户,不能使程序崩溃。

    编写一个Java应用程序,从键盘读取用户输入两个字符串,并重载3个函数分别实现这两个字符串的拼接.整数相加和浮点数相加.要进行异常处理,对输入的不符合要求的字符串提示给用户,不能使程序崩溃. pack ...

  5. java实现两个最大整数相加_JAVA-实现两个超大整数相加

    思路: 第一步,把整数倒序存储,整数的个位存于数组0下标位置,最高位存于数组长度-1下标位置.之所以倒序存储,更加符合我们从左到右访问数组的习惯. 我们以 426709752318 + 9548125 ...

  6. 漫画:如何实现大整数相加

    转载自  漫画:如何实现大整数相加 在程序中列出的 "竖式" 究竟是什么样子呢?我们以 426709752318 + 95481253129 为例,来看看大整数相加的详细步骤: 第 ...

  7. java integer 相加_Java-整数相加求和

    一.设计思想 1.创建工程Sum,在包Add下添加类Sum,功能是整数相加求和. 2.输入多个整数. 3.将输入的字符串转化为数字,用import语句导入包java.util,再调用类Scanner ...

  8. 怎样实现大整数相加?

    问题: 如果给出两个很大很大的整数,这两个数大到long类型也装不下,比如100位整数,如何求它们的和呢? 分析: 回顾起小学数学,当我们需要计算两个较大数目的加减乘除,我们是用列竖式的方式来计算的. ...

  9. php二进制整数相加怎么解决_PHP两个n位的二进制整数相加问题的解决

    两个n位的二进制整数相加问题PHP实现,供大家参考,具体内容如下 两个n位二进制数分别存储在两个n元数组A和B中,这两个整数的和存在一个n+1元的数组C中 答: 此问题主要是考察相加进位的问题,元素1 ...

最新文章

  1. Mybatis和Spring整合
  2. pat 1123(AVL)
  3. 编程时程序无错却崩溃_人间真实:程序员的 60 个崩溃瞬间!
  4. qt利用QSplitter任意拆分窗口
  5. mybatisplus自动生成id_【mybatis-plus】主键id生成、字段自动填充
  6. HTML Layui Distpicker 住址/收货地址选择 联动选择框
  7. html播放监控视频教程,使用javascript实现监控视频播放并打印日志
  8. 软件开发过程学习笔记(一)之软件开发流程
  9. 厦门大学904数据结构与机器学习资料与辅导
  10. 10计算机语言代表什么,win10是什么编程语言写的_win10史诗般的巨型编程项目
  11. Linux驱动学习--V4L2框架
  12. 问卷调查系统的设计与实现【源码:文档:教程】
  13. 【经典】synergy共享鼠标键盘/一套鼠标键盘操作多台电脑
  14. Nacos搭建集群以及遇到的问题
  15. 利用Matlab考察数据的边缘正态性 作Q_Q图
  16. react-native 性能优化,处理卡顿
  17. BUG InvalidArgumentError (see above for traceback): You must feed a value for placeholder tensor 'Pl
  18. 常用电子元件基础知识(图解)
  19. 读书是进步的源泉 | 实践是前进的基石
  20. Android垃圾清理功能的初步

热门文章

  1. 【ElasticSearch】Es 源码之 AutoFollowCoordinator 源码解读
  2. 【ElasticSearch】Es 源码之 PageCacheRecycler 源码解读
  3. 1.1.0-简介-P2-分布式系统的一些基本概念
  4. 【clickhouse】MergeTree引擎的固定/自适应索引粒度
  5. 【Elasticsearch】分片未分配 (UNASSIGNED) failed to obtain in-memory shard lock
  6. 【面试】面试文章积累
  7. 95-080-048-源码-启动-启动standalonesession
  8. 【Flink】Flink 系统监控指标
  9. RocKetMQ : MQClientException: The producer service state not OK, CREATE_JUST
  10. 【Java集合之Map】HashMap、HashTable、TreeMap、LinkedHashMap区别