Man*_*kar 4 java bit-manipulation biginteger
我知道有方法shiftLeft(int n)和shiftRight(int n)针对BigInteger类只需要整数类型作为参数,但我有一个转移它long的变量.有没有办法做到这一点?
BigInteger只能有Integer.MAX_VALUE位.向右移动超过此值将始终为零.向左移动任何值,但零将是溢出.
来自Javadoc
* BigInteger constructors and operations throw {@code ArithmeticException} when
* the result is out of the supported range of
* -2<sup>{@code Integer.MAX_VALUE}</sup> (exclusive) to
* +2<sup>{@code Integer.MAX_VALUE}</sup> (exclusive).
Run Code Online (Sandbox Code Playgroud)
如果你需要超过20亿位来表示你的价值,你就会遇到一个相当常见的问题,BigInteger并不适合.
如果你需要在很大范围内进行位操作,我建议有一个BitSet[] 这将允许最多2个bn的2个位集,超过你的可寻址内存.
是的,长变量可能会达到10 ^ 10
对于每个10^10位数,您需要1.25 TB的内存.对于这种大小的数据,您可能需要将其存储在堆之外,我们有一个库可以将这么多数据保存在单个内存映射中,而不需要使用太多的堆,但是您至少需要在单个磁盘上拥有这么多空间.https://github.com/OpenHFT/Chronicle-Bytes
| 归档时间: |
|
| 查看次数: |
278 次 |
| 最近记录: |