BigIntegers在基础上如何详细工作?

问题描述 投票:0回答:1

我看过Explain BigInt Like I'm Five,但我已经了解BigInt 。我想知道如何制作一个。我试图将BigInt.js分开(v8 bigint.cc太大,我对C ++不熟悉)。

对于我自己,也许对将来的其他人来说,能否解释一下支持任意大小的整数的BigInt的数据模型是什么样的?基本上,什么是对象及其属性。我了解到,对于BigInt,所有的算术functions都以独特的方式实现,但是我看不到kernel是什么。 BigInt结构的本质是什么?也许this one会更容易理解。

arrays object integer data-modeling bigint
1个回答
1
投票

[A BigInt的工作原理与您在学校学习的整数完全相同,只是“数字”不是基于10个符号,而是基于4294967296(或18446744073709551616,或专门用于ECMAScript 9007199254740991)。

数据模型的内核只是“数字”列表,它们本身是固定大小的整数和一个符号位(或者,第一个“数字”本身就是带符号的)。其他一切都是性能优化。

用伪代码,看起来像这样:

record BigInt
    sign: boolean
    digits: sequence[unsigned_integer]

或此:

record BigInt
    first_digit: signed_integer
    digits: sequence[unsigned_integer]

同样,如果您以10为基数写下一个整数,则将其写为一个数字序列和一个符号,即写出当前年份,您将写成:201,[ C0],表示(从右到左)

9

或者,也许您会写 9 * 10^0 = 9 + 1 * 10^1 = 10 + 0 * 10^2 = 000 + 2 * 10^3 = 2000 ==== 2019 7E,表示(从右到左)

3

与]相同>

  3_16 * 10_16^0
+ E_16 * 10_16^1
+ 7_16 * 10_16^2

与]相同>

  3_16 * 16_10^0
+ E_16 * 16_10^1
+ 7_16 * 16_10^2

而且 3_10 * 16_10^0 = 3_10 + 14_10 * 16_10^1 = 224_10 + 7_10 * 16_10^2 = 1792_10 ======= 2019_10 完全相同的方式

表示,除了底数大很多。
© www.soinside.com 2019 - 2024. All rights reserved.