C++ 使用字符数组实现的BigInteger的上限是多少?
如果我使用字符数组(在C++中)输入C++ 使用字符数组实现的BigInteger的上限是多少?,c++,memory,numbers,C++,Memory,Numbers,如果我使用字符数组(在C++中)输入biginger,以10的幂计算,那么在32位系统中我的上限是多少 换句话说, -10^x
biginger
,以10的幂计算,那么在32位系统中我的上限是多少
换句话说,
-10^x
4GB内存为232字节,或4294967296字节
或者4294967295,如果我们减去你想要为符号保留的一个字节
这是34359738360位
这许多位可以保存23435973860个唯一值
-10^x(−(2^(n)−1) ))至(2^(n)−1) − 1)
计算有符号整数的范围,其中n
是位数
假设您指的是分配的全部4GB内存,即32位内存空间中的232(4294967295)个可寻址字节,即235(34359738368)位
在开始的时候把它放到公式中,你得到的范围是-(2235-1)到2235-1-1
这是假设您使用位作为符号,而不是整个字节。如果要使用整个字节作为符号,则应计算235-8位的无符号范围。从0到2235-8−一,
根据佩奇的说法,要将基数为2的指数转换为基数为10的指数,应该使用公式x=m*ln(2)/ln(10),即从2m转换为10x
因此,你的答案是上界是10235-8*ln(2)/ln(10)。我甚至不打算尝试将该指数改为十进制值。所涉及的类/结构的大小很重要:你能告诉我们它们吗?说清楚一点:你想知道一个4GB的变量可以代表多大的范围吗?32位系统与任何事情(除了如何获得4GB上限)有什么关系?如果只使用2的补码,就不需要使用完整字符来表示符号。还是说每个数字(相对于每个字节)都存储为一个字符?这是实现“biginger
”的一种非常愚蠢的方法。愚蠢的是,当然。但这是一个理论问题@黑色假定为0。@ScottHunter是。32位,因为我想将其保存在内存中,并使其全部可寻址。4GB,因为这是32位系统的上限?我希望x
的值是10的幂。是的,我回答完了。听起来差不多。我也这么认为,但我会等一段时间,在我接受你的答案之前,得到更多的答案。谢谢:)不清楚您是否需要一个字节中的单个数字(以10为基数)。如果是这样,这个答案的第一行应该是“一个8位字节可以容纳10个唯一值”