gpt4 book ai didi

java BigInteger转换算法

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

Java 中的 BigInteger 将数字存储为“无符号整数”数组(它是整数数组,但它们将信息存储在 32 位系统中,然后将其转换为 long 并进行运算)。

它们如何从十进制系统转换为基本 32 位系统?算法是什么?

我正在阅读资源,但我不明白。我看到他们将数字拆分为 10 位数字字符串(整数可以处理 1_000_000_000),但接下来呢?除以 2?还是 2^32 (4294967296)?

感谢您帮助理解它。

最佳答案

对于非常大的数字,可能会使用一种棘手的分而治之算法,但除此之外,它就像整数一样完成:

  1. 将中间结果(一个 BigInteger)设置为值 BigInteger.ZERO。
  2. 阅读标志(如果有的话)并记住它
  3. 读一个数字
  4. 使用给定的数字基数(基数,2..36),将数字转换为二进制,例如在 10 进制中,'9' 被转换为 9,在 16 进制中,'A' 被转换为 10,等等。
  5. 将中间结果乘以底数并加上数字的值,因此如果底数为 10,则将中间结果乘以 10 并加上您刚刚读取的 9。
  6. 从第 2 点开始重复,直到读取整个字符串
  7. 设置标志
  8. 清理并在必要时删除前导零等。
  9. 返回中间 BigInteger 作为函数结果。

循环是这样的:

number: 1234 (base 10)
intermediate x = 0
read digit = 1: x = x * 10 + 1 = 0 + 1 = 1
read digit = 2: x = x * 10 + 2 = 10 + 2 = 12
read digit = 3: x = x * 10 + 3 = 120 + 3 = 123
read digit = 4: x = x * 10 + 4 = 1230 + 4 = 1234

the same number in base 16:
read digit = 1: x = x * 16 + 1 = 0 + 1 = 1
read digit = 2: x = x * 16 + 2 = 16 + 2 = 18 (= 0x12)
read digit = 3: x = x * 16 + 3 = 288 + 3 = 291 (= 0x123)
read digit = 4: x = x * 16 + 4 = 4656 + 4 = 4660 (= 0x1234)

关于java BigInteger转换算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55736065/

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