大型int编译器实现?

时间:2009-06-15 12:23:57

标签: c compiler-construction biginteger

我正在构建一个类似于c的编译器,但我想要它解析大于2 ^ 32的整数。怎么可能?如何在python和ruby中实现大整数的语言.. !!

7 个答案:

答案 0 :(得分:7)

有些图书馆可以做这类事情。

查看gmplib

答案 1 :(得分:2)

有许多大型数据库,请参阅this wikipedia article以获取完整列表。

GMP(GNU Multiple Precision Arithmetic Library)足以应对我所遇到的一切。 NTL更加相同,但面向对象。

一般来说,这些库代表带有数组的数字,如果你想要自己滚动,那么数字的每个数字都是一个字符,但这需要很多工作。

答案 2 :(得分:1)

如果你想自己写,请跟随我的记忆行程; - )。

在过去,当计算机使用8位时。我们经常需要用大数字计算(例如> 255)。我们都必须编写例程。例如,添加。

如果我们需要相互添加两个字节的数字,我们使用以下算法:

  • 添加最不重要的字节。
  • 如果结果超过8位,则进位位置位。
  • 添加最重要的字节和进位标志(如果已设置)。
  • 如果结果超过8位,则会产生溢出错误(但如果您想要更多2个字节,则无需执行此操作。

您可以将其扩展为更多字节/字/ dword / qwords以及其他运算符。

答案 3 :(得分:0)

我相信你需要某种bigint库,可以在网上找到,只需进行一些搜索,你就可以找到一个适合你项目的库。

因为,我认为简单地解析整数是不够的。您的用户不仅希望存储,而且可能还希望使用这些数字执行操作。

答案 4 :(得分:0)

Felix von Leitner有一个slide,涵盖了一些bignum基础知识。就个人而言,我认为这是非常翔实和技术性的。

答案 5 :(得分:0)

来自Matt McCutchen的C ++ Big Integer Library

https://mattmccutchen.net/bigint/

仅限C ++源代码。使用非常简单。

答案 6 :(得分:-2)

你必须在c中使用某种结构来实现这一点。如果您使用x86平台而不是x64,您会发现这很困难。如果您使用的是x86,请准备好熟悉程序集和进位标志。

祝你好运!