Dar*_*use 1 ruby binary 64-bit integer largenumber
Ruby可以存储非常大的数字.现在我想起来了,我甚至都不知道那是怎么回事.
计算机以两位数字(0和1)的形式存储数据.这被称为二进制表示法.但是,它们可以存储的数字大小有限.
目前大多数操作系统运行在64位.这意味着变量的最高可分配地址空间是64位.
整数存储在base 2系统中,这意味着计算机应该能够存储的最高值
1111111111111111111111111111111111111111111111111111111111111111
Run Code Online (Sandbox Code Playgroud)
由于计算机只能读取2个可能的值,这意味着上面的数字可以表示为
2 ^ 64
Run Code Online (Sandbox Code Playgroud)
这意味着整数可读取的最高值最多为18,446,744,073,709,551,615
老实说,我甚至不明白如何存储高于此值的整数值.
Ruby使用Bignum对象来存储大于的数字2^64.你可以在这里看到这是如何工作的描述:
class_diagram http://patshaughnessy.net/assets/2014/1/9/closer-look.png
在左侧,您可以看到RBignum包含一个名为RBasic的内部结构,其中包含所有Ruby对象使用的内部技术值.下面我展示了Bignum对象的特定值:数字和len.digits是指向32位值数组的指针,该数组包含分组为32的实际大整数位.len记录数字数组中有多少32位组.由于digits数组中可以有任意数量的组,因此Ruby可以使用RBignum表示任意大的整数.