通过长变量转换Java的BigInteger

我知道BigInteger类有方法shiftLeft(int n)和shiftRight(int n),它只接受int类型作为参数,但我必须用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).

如果你需要超过20亿位来表示你的价值,你就会遇到一个相当常见的问题,BigInteger并不适合.

如果你需要在很大的范围内进行位操作,我建议使用BitSet []这将允许最多2个bn的2位,超过你的可寻址内存.

yes the long variable might go up to 10^10

对于每个10 ^ 10位数,您需要1.25 TB的内存.对于这种大小的数据,您可能需要将其存储在堆之外,我们有一个库可以将这么多数据保存在单个内存映射中而不需要使用太多堆,但是您至少需要在单个磁盘上有这么多空间. https://github.com/OpenHFT/Chronicle-Bytes

上一篇:[数学建模] 数据预处理


下一篇:数据分析 第五篇:离群点检测