【发布时间】:2010-07-23 21:32:50
【问题描述】:
我有点问题。为了增加我的 C 知识,我决定尝试实现一个基本的 bigint 库。
bigint 结构的核心将是一个 32 位整数数组,之所以选择它们是因为它们适合寄存器。这将允许我在 64 位整数中溢出的数字之间进行操作(这也将适合寄存器,因为我在 x86-64 上),并且我可以位移出结果的每个部分。我已经实现了基本的加法,为了测试它是否工作,我必须打印数组。出于我自己的测试目的,如果我使用printf() 并以十六进制输出每个数字就可以了。我可以很好地阅读。
但是,大多数人无法阅读十六进制。由于数字存储在(基本上)以 2^32 为基数,因此打印有点问题。什么是转换为 base 10 的好方法?
编辑:
这不是关于知道如何从基础转换到基础,而是关于实现这一点的好方法。我正在考虑用另一个带有打印转换的基础制作另一个 bigint。
【问题讨论】:
-
要测试 bignum 实现,我建议使用常见的 lisp 实现,例如 Clisp。 Common lisp 内置了 bignums,您只需启动解释器和类型表达式即可。您无需了解 lisp 即可执行基本操作,例如加法
(+ 1 2 3)或求幂(expt 42 10000)。十六进制常量是#x,后跟数字。(= #x10 16)显示T为真,(= #x10 10)显示NIL为假。 -
哦,如果您知道 Emacs 是它的计算器 (
M-x calc),那么还有一个更简单的参考 bignum 实现。 -
@Giles:感谢您的想法,尽管我目前正在使用 GCHi 进行测试。不过,这是个好主意
-
bc和dc实用程序也进行 bignum 计算。
标签: c biginteger c99