当前位置: 首页 > 知识库问答 >
问题:

Java的BigInteger实现

武峻熙
2023-03-14

我是新来的,所以请原谅我的小错误。我目前正在做一个我的小项目,看到我处理长度在四万或更多的数字。

我目前正在使用BigInteger来处理这些值,我需要一些执行速度更快的东西。我读到BigInteger在其实现中使用了一个整数数组,我需要知道的是BigInteger是使用这个数组中的每个索引来表示每个小数点,就像1-9一样,还是使用了更有效的方法

我这么问是因为我已经想到了一个使用位操作的实现,这使得它更高效、内存和处理更明智。

谢谢你。

共有1个答案

郭炳
2023-03-14

至少在Oracle的Java8和OpenJDK8中,它不会为每个int存储一个十进制数字。它将每个32位int的完整32位部分存储在int[]中,这可以从其源代码中看到。

对它进行位操作非常快,因为它是一个符号幅度值,而且幅度像您所期望的那样打包存储,只需确保使用相关的BigInteger位方法,而不是实现自己的方法。

如果您仍然需要更快的速度,尝试一些类似GMP的东西,但要注意它使用的是LGPL或GPL许可证。在Java之外使用它也会更好。

 类似资料:
  • 问题内容: 我在BigInteger的.Net项目Mono实现中使用(链接)。在Java中,我使用java.math.BigInteger。 相同的代码在Java中产生不同的结果。 .Net代码 Java代码。相同的inputBytes数组,相同的指数和模数,但结果不同。 我不明白为什么结果不同。 PS,例如,如果我使用InputBytes Java和.Net中的结果相同 魔术在哪里? 问题答案:

  • 描述 (Description) java.math.BigInteger.modPow(BigInteger exponent, BigInteger m)返回一个BigInteger,其值为(this exponent mod m)。 与pow不同,此方法允许负指数。 声明 (Declaration) 以下是java.math.BigInteger.modPow()方法的声明。 public

  • 问题内容: 如何与大整数一起使用?喜欢 Eclipse表示未为BigInteger定义运算符%。 有任何想法吗? 问题答案: 像这样: 或者,正如用户Duncan在评论中建议的那样,我们可以像这样完全删除if语句:

  • 问题内容: BigInteger bigInteger = …; 我需要比较一些任意的BigInteger值。我想知道哪种方法是正确的。鉴于以上代码,应使用哪一个?原始代码在顶部。我正在考虑将其更改为第二种方法。 问题答案: 如果要测试BigInteger是否具有正值,则第一种方法是错误的:仅返回 低阶64位 ,这可能会还原符号…因此,对于正的BigInteger,测试可能会失败。 另一种选择:如

  • 问题内容: 在Java中,大多数基本类型都是带符号的(一位用于表示+/-),因此当我超出类型的限制时,我会得到意外的结果,例如负数。 有什么比使用BigInteger更好的解决方案了,因为BigInteger存在性能问题,并且您需要对基本算术使用类方法而不是语言运算符(以提高可读性)? 问题答案: 不,没有更好的解决方案。如果您使用的值不能为长整型或双精度型,那么您将需要使用诸如的引用类型,并且J

  • 描述 (Description) java.math.BigInteger.xor(BigInteger val)返回一个BigInteger,其值为(this ^ val)。 当且仅当this和val中的一个为负时,此方法返回负BigInteger。 声明 (Declaration) 以下是java.math.BigInteger.xor()方法的声明。 public BigInteger xo