Arrays 大整数是如何在基本层次上详细工作的?

Arrays 大整数是如何在基本层次上详细工作的?,arrays,object,integer,data-modeling,bigint,Arrays,Object,Integer,Data Modeling,Bigint,我看到了,但我已经明白了什么是大人物。我想知道怎么做一个。我正试着把它们分开(这个太大了,我不熟悉C++) 对于我自己和将来的其他人来说,有人能解释一下支持任意大小整数的BigInt的数据模型是什么样子的吗?基本上,什么是对象及其属性。我知道所有的算术函数都是以独特的方式为BigInt实现的,但是我不知道内核是什么。BigInt结构的本质是什么?也许更容易摸索。一个BigInt的工作原理与你在学校学到的整数完全一样,只是“数字”不是基于10个符号,而是基于4294967296(或18446744

我看到了,但我已经明白了什么是大人物。我想知道怎么做一个。我正试着把它们分开(这个太大了,我不熟悉C++)


对于我自己和将来的其他人来说,有人能解释一下支持任意大小整数的BigInt的数据模型是什么样子的吗?基本上,什么是对象及其属性。我知道所有的算术函数都是以独特的方式为BigInt实现的,但是我不知道内核是什么。BigInt结构的本质是什么?也许更容易摸索。

一个
BigInt
的工作原理与你在学校学到的整数完全一样,只是“数字”不是基于10个符号,而是基于4294967296(或18446744073709551616,或特别是ECMAScript 9007199254740991)

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

在伪代码中,它看起来像这样:

record BigInt
符号:布尔
数字:序列[无符号\u整数]
或者这个:

record BigInt
第一位数字:有符号整数
数字:序列[无符号\u整数]
同样,如果你在10进制中写下一个整数,你把它写成一个数字序列和一个符号,也就是说,写下当年,你会写:
2
0
1
9
,表示(从右到左)

9*10^0=9
+ 1 * 10^1 =   10
+ 0 * 10^2 =  000
+ 2 * 10^3 = 2000
====
2019
或者,你可以写
7
E
3
,表示(从右到左)

3*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

BigInt
的表示方式完全相同,只是基数(大得多)。

base 10⁹ 或10⁹ 如果主运算是输入/输出而不是数学运算,也可以使用它,因为在从小数点转换到小数点时,它避免了10的除法。Knuth的半数值算法在Bigint算术设计问题、算法和计算复杂性方面有非常广泛的一节。它从“小学”算法开始,然后进入越来越复杂的改进,如Karatsuba、Toom Cook和FFT乘法技术。