如果我使用字符数组(在C ++中)强制BigInteger
,就10的幂而言,在32位系统中我的上限是什么?
换句话说,
- 10^x < N <= 10^x
(第一个字符保留用于签名)。
32位系统中的x
是什么?
现在请忽略我们已为操作系统保留内存,并认为我们可以寻址所有4GB内存。
答案 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)。我甚至不会尝试将该指数更改为十进制值。