If I have an assignment

Long c = a + b;

Is there an easy way to check that a + b is not bigger/smaller than Long.MAX_VALUE/Long.MIN_VALUE?

解决方案

Using Guava, it's as simple as

long c = LongMath.checkedAdd(a, b); // throws an ArithmeticException on overflow

which is, I'd like to think, very readable indeed. (LongMath Javadoc here.)

For the sake of fairness, I'll mention that Apache Commons provides ArithmeticUtils.addAndCheck(long, long).

If you want to know how they work, well, the answer is one line of bit-hackery for Guava: the result doesn't overflow if (a ^ b) < 0 | (a ^ (a + b)) >= 0. This is based on the trick that the bitwise XOR of two numbers is nonnegative iff they have the same sign.

So (a ^ b) < 0 is true if a and b have different signs, and if that's the case it'll never overflow. Or, if (a ^ (a + b)) >= 0, then a + b has the same sign as a, so it didn't overflow and become negative.

(For more tricks like this, investigate the lovely book Hacker's Delight.)

Apache uses more complicated casework based on the sign of a and b.

java long.max_value,Long + Long不大于Long.MAX_VALUE相关推荐

  1. Java黑皮书课后题第10章:10.21(被5或6整除)找出能被5或6整除的大于Long.MAX_VALUE的前10个数字

    Java黑皮书课后题第10章:10.21(被5或6整除)找出能被5或6整除的大于Long.MAX_VALUE的前10个数字 题目 代码 结果 题目 都在上面 代码 import java.math.B ...

  2. Java黑皮书课后题第10章:*10.18(大素数)编写程序找出五个大于Long.Max_VALUE的素数

    10.18(大素数)编写程序找出五个大于Long.Max_VALUE的素数 题目 破题 代码 运行结果 题目 10.18(大素数)编写程序找出五个大于Long.Max_VALUE的素数 破题 类似编程 ...

  3. Java黑皮书课后题第10章:*10.17(平方数)找出大于Long.MAX_VALUE的前10个平方数。平方数是指形式为n^2的数

    例如,4.9以及16都是平方数,找到一种有效方法,使程序能快速运行 题目 破题 特别提醒 代码 题目 *10.17(平方数)找出大于Long.MAX_VALUE的前10个平方数.平方数是指形式为n^2 ...

  4. java判断long 大于0,JAVA的一道习题:找出五个大于Long.MAX_VALUE的素数

    在素数判断方法isPrime处不知道该怎么写才能让程序跑出结果而不用等到天长地久... public static void main(String[] args) { long startTime ...

  5. java判断long 大于0_JAVA的一道习题:找出五个大于Long.MAX_VALUE的素数

    在素数判断方法isPrime处不知道该怎么写才能让程序跑出结果而不用等到天长地久... public static void main(String[] args) { long startTime ...

  6. java偶数的表达式_十六进制数大于10的正则表达式,在Java中长度应为偶数。

    以下是将大于10的十六进制数与偶数长度匹配的正则表达式-^(?=.{10,255}$)(?:0x)?\p{XDigit}{2}(?:\p{XDigit}{2})*$ 哪里,^:匹配句子的开头. (?= ...

  7. 迷茫之后:Java研发转型售前——选择大于努力!

    写下这段文字的时候,小弟已经从Java开发岗位转型软件售前近20天了........ 2011年9月毕业于某培训机构,学的是java语言.之后来到深圳,进入华为外包开始了我的程序猿生涯....刚入职场 ...

  8. java 超过 xmx_进程物理内存远大于Xmx的问题分析

    本文来自: PerfMa技术社区 PerfMa(笨马网络)官网 问题描述 最近经常被问到一个问题,"为什么我们系统进程占用的物理内存(Res/Rss)会远远大于设置的Xmx值",比 ...

  9. java float.max value_java – Float.POSITIVE_INFINITY和Float.MAX_VALUE有什么区别?

    不,他们根本不一样. Float.MAX_VALUE是可以在浮点数中表示的最大有限值.除了无限远,你不会发现任何比这个大的值.但是您可以对其执行各种其他操作. Float.POSITIVE_INFIN ...

最新文章

  1. python xlrd简单读取excel
  2. halcon 旋转_HALCON高级篇:3D相机标定(2/3)
  3. 基于SpringBoot 2.0正式版的SpringCloud的微服务实战项目搭建
  4. 10分钟学会python函数式编程
  5. 计算机原子指令,计算机体系结构——多线程(核)访存“上锁”——原子指令...
  6. 如何发布第一个属于自己的npm包
  7. 基于AWS的云备份容灾解决方案
  8. HDU 6051 If the starlight never fade(原根+推式子)
  9. 解决github上的提交说明中文乱码的问题
  10. Linux网络编程 -- Linux常用工具的使用(vim、gcc、gdb、makefile、shell)
  11. 解决:关于电脑访问百度很慢的问题
  12. hdu4489 组合公式+dp
  13. Unity使用微软SDK实现文字转语音
  14. 括号匹配,实现简单计算器(加减乘除,小括号)
  15. picpick截图处理后关闭未保存的图像时不再询问
  16. com.monotype.android.font.ktoppo,Zawgyi Myanmar Fonts Free
  17. excel一列数字里有特殊符号怎么求和
  18. 猫耳FM音频转换成MP3格式
  19. Popush前端小优化——岳一飞
  20. Sting str = aaaa 的形式定义一个字符串最大长度只能有 65534 个。

热门文章

  1. AliOS Things SIG BLE Mesh网络的介绍和搭建
  2. Kubernetes 也有局限性吗?
  3. 数据库中间件漫谈——看看云时代,它会走向何方
  4. 云+X案例展 | 传播类:九州云 SD-WAN 携手上海电信,助力政企客户网络重构换新颜...
  5. 华为豪投20亿!3年培养100万AI人才,网友不服!
  6. 探秘HDFS —— 发展历史、核心概念、架构、工作机制 (上)| 博文精选
  7. 美企调查华为设备安全性,华为发长文质疑;摩根大通预计苹果2020年将推5G iPhone;谷歌拟联手Dish成立美国第四大运营商...
  8. oracle 取整点的数据,Oracle SQL语句操作数字:取整、四舍五入及格式化
  9. webview键盘自适应_黑爵毛茸茸机械键盘:感受来自治愈系的暖萌
  10. ios弧形进度条_iOS如何实现环形进度条加载效果