具有字符数组实现的BigInteger的上限是多少?

时间:2015-08-05 12:50:56

标签: c++ memory numbers

如果我使用字符数组(在C ++中)强制BigInteger,就10的幂而言,在32位系统中我的上限是什么?

换句话说,

- 10^x < N <= 10^x

(第一个字符保留用于签名)。

32位系统中的x是什么?

现在请忽略我们已为操作系统保留内存,并认为我们可以寻址所有4GB内存。

2 个答案:

答案 0 :(得分:1)

一个8位字节可以容纳2个 8 ,或256个唯一值。

4GB内存是2 32 ,或4294967296 字节

或4294967295,如果我们减去要为符号保留的一个字节

那是34359738360

这么多位可以容纳2个 34359738360 唯一值。

  

- 10^x < N <= 10^x

     

(第一个字符留作标志)。

     

32位系统中的x是什么?

Wolfram Alpha suggests - 10^1292913986 < N <= 10^1292913986是10的最大代表权力。

所以x是1,292,913,986。

答案 1 :(得分:1)

(−(2^(n−1))) to (2^(n−1) − 1)计算有符号整数的范围,其中n是位数。[1]

假设您指的是分配的整个4GB内存,即32位内存空间中的2个 32 (4,294,967,295)个可寻址字节,即2 35 (34,359,738,368)比特。

在开始时将它放入公式中,你得到一个范围 - (2 2 35 -1 )到2 2 35 < / sup> -1 -1

这假设您使用一个符号作为符号,而不是整个字节。如果您使用整个字节进行符号,则应计算2 35 -8位的无符号范围。其为0至2 2 35 -8 -1

根据this页面,要从基数2的指数转换为基数10的指数,您应该使用公式x = m * ln(2)/ ln(10),您要转换从2 m 到10 x

因此,您的答案是上限为10 2 35 -8 * ln(2)/ ln(10)。我甚至不会尝试将该指数更改为十进制值。