我正在构建一个类似于 c 的编译器,但我希望它解析大于 2^32 的整数。怎么可能?大整数是如何在 python 和 ruby 之类的语言中实现的..!!
问问题
269 次
7 回答
8
有图书馆可以做这种事情。
查看gmplib。
于 2009-06-15T12:29:27.717 回答
2
有很多大数字库,完整列表请参阅此 wikipedia 文章。
GMP(GNU 多精度算术库)足以满足我所遇到的一切。NTL大致相同,但它是面向对象的。
通常,如果您想自己滚动,这些库用数组表示数字,数字的每个数字作为一个字符,但这是很多工作。
于 2009-06-15T13:10:40.817 回答
1
如果您想自己编写,请跟随我的记忆之旅;-)。
在过去,当计算机使用 8 位时。我们经常需要用大数字(比如 > 255)进行计算。我们都必须编写例程。比如加法。
如果我们需要将两个字节的数字相加,我们使用以下算法:
- 添加最低有效字节。
- 如果结果超过 8 位,则设置进位位。
- 添加最高有效字节和进位标志(如果设置)。
- 如果结果超过 8 位,则会产生溢出错误(但如果您想要超过 2 个字节,则不需要这样做。
您可以将其扩展到更多字节/单词/dwords/qwords 和其他运算符。
于 2009-06-15T12:45:08.117 回答
0
我相信您会需要某种 bigint 库,这些库可以在网上找到,只需进行一些搜索,您可能会找到适合您项目的一个。
因为,我相信,仅仅解析整数是不够的。您的用户不仅希望存储,而且可能还希望使用这些数字执行操作。
于 2009-06-15T12:30:28.153 回答
0
Felix von Leitner的幻灯片涵盖了一些 bignum 基础知识。我个人认为这是非常有用和技术性的。
于 2009-06-15T13:09:46.733 回答
0
于 2013-01-23T09:24:36.617 回答
-2
您必须在 c 中使用某种结构来实现这一点。如果您使用的是 x86 平台而不是 x64,您会发现这很困难。如果您使用的是 x86,请准备好熟悉汇编和进位标志。
祝你好运!
于 2009-06-15T12:26:31.283 回答