Ruby如何存储大量数据?
Ruby可以存储非常大的数字。现在我想起来了,我甚至不知道这怎么可能 计算机以两位数(0和1)的序列存储数据。这被称为二进制表示法。但是,它们可以存储的数字大小是有限制的 目前大多数操作系统都以64位运行。这意味着变量的最高可分配地址空间为64位 整数存储在基数为2的系统中,这意味着计算机应该能够存储的最高值是Ruby如何存储大量数据?,ruby,binary,integer,64-bit,largenumber,Ruby,Binary,Integer,64 Bit,Largenumber,Ruby可以存储非常大的数字。现在我想起来了,我甚至不知道这怎么可能 计算机以两位数(0和1)的序列存储数据。这被称为二进制表示法。但是,它们可以存储的数字大小是有限制的 目前大多数操作系统都以64位运行。这意味着变量的最高可分配地址空间为64位 整数存储在基数为2的系统中,这意味着计算机应该能够存储的最高值是 1111111111111111111111111111111111111111111111111111111111111111 由于计算机只能读取2个可能的值,这意味着上述数字可以表
1111111111111111111111111111111111111111111111111111111111111111
由于计算机只能读取2个可能的值,这意味着上述数字可以表示为
2 ^ 64
这意味着一个整数可以读取的最大值应该是18446744073709551615
老实说,我甚至不明白怎么可能存储比这更高的整数值。Ruby使用对象存储大于2^64的数字。您可以看到有关其工作原理的说明:
在左边,您可以看到RBignum包含一个名为
RBasic,它包含所有Ruby使用的内部技术值
物体。下面我将显示特定于Bignum对象的值:digits
还有莱恩。digits是指向包含
实际大整数的位分组为32位。莱恩如何记录
数字数组中有许多32位组。既然可以有
数字数组中的组数,Ruby可以任意表示
使用RBignum的大整数
你知道如何在内存中存储大于64字节的二进制文件吗?现在想象一下,该文件包含一个非常大的整数的二进制值……很简单,它不依赖于64位。虽然我不打算讨论细节(因为我没有完全了解它们),但您想看看BigNum和BigDecimal。你怎么能只用10个手指就能储存大量的数字呢?有趣的解释。我听说过Bignum类,并且知道Ruby可以存储非常大的数字。但不确定它是如何做到的。非常感谢你的解释。