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

What is the upper bound of BigInteger with character array implementation?

如果我用字符数组(在 C++ 中)实现 BigInteger,根据 10 的幂,我在 32 位系统中的上限是多少?

换句话说,

- 10^x < N <= 10^x

(第一个字符保留为符号)。

32位系统中的x是什么?

请暂时忽略我们为 OS 预留的内存,并考虑所有 4GB 内存都可以由我们寻址。

一个 8 位字节可以容纳 28,即 256 个唯一值。

4GB内存为232,即4294967296字节.

或者4294967295,如果我们减去你想为一个符号预留的一个字节

那是 34359738360

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

- 10^x < N <= 10^x

(first character is reserved for sign).

What is x in 32 bit system?

Wolfram Alpha suggests - 10^1292913986 < N <= 10^1292913986 作为 10 的最大可表示次方。

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

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

假设您指的是分配的整个 4GB 内存,即 32 位内存中的 232 (4,294,967,295) 个可寻址字节 space,即 235 (34,359,738,368) 位。

在开始时将其代入公式,您会得到 - (2235-1) 到 2235-1-1

这是假设您使用一个位作为符号,而不是整个字节。如果您要使用整个字节作为符号,则应计算 235-8 位的无符号范围。这是从 0 到 2235-8−1

根据 this 页面,要将以 2 为底的指数转换为以 10 为底的指数,您应该使用公式 x = m*ln(2)/ln(10),其中您正在从 2m 转换为 10 x.

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