gpt4 book ai didi

java - Long + Long 不大于 Long.MAX_VALUE

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:04:16 25 4
gpt4 key购买 nike

如果我有任务

Long c = a + b;

有没有一种简单的方法来检查 a + b 不大于/小于 Long.MAX_VALUE/Long.MIN_VALUE

最佳答案

使用 Guava , 就这么简单

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

我想,这确实非常可读。 (LongMath Javadoc here .)

为了公平起见,我会提到 Apache Commons 提供了 ArithmeticUtils.addAndCheck(long, long) .

如果您想知道它们是如何工作的,那么答案就是 Guava 的一行代码:如果(a ^ b) < 0 | (a ^ (a + b)) >= 0,结果不会溢出。 .这是基于两个数字的按位异或非负的技巧,前提是它们具有相同的符号。

所以 (a ^ b) < 0如果 a 为真和 b有不同的迹象,如果是这样的话,它永远不会溢出。或者,如果 (a ^ (a + b)) >= 0 , 然后 a + ba 具有相同的符号, 所以它没有溢出变成负数。

(要了解更多此类技巧,请查看这本可爱的书 Hacker's Delight。)

Apache 根据 a 的符号使用更复杂的案例工作和 b .

关于java - Long + Long 不大于 Long.MAX_VALUE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9057290/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com