我有点问题.为了增长我对C的了解,我决定尝试实现一个基本的bigint库.
bigint结构的核心是一个32位整数数组,因为它们适合寄存器而被选中.这将允许我在数字之间进行操作,这些数字将以64位整数溢出(这也将适合寄存器,因为我在x86-64上),并且我可以对结果的每个部分进行位移位.我已经实现了基本的添加,并且为了测试它是否正常工作,我必须打印数组.对于我自己的测试目的,如果我使用printf()
并输出十六进制中的每个数字就没问题.我可以读到这很好.
但是,大多数人都读不懂十六进制.由于数字存储在(基本上)基数2 ^ 32中,因此打印有点问题.什么是转换到基数10的好方法?
编辑:
这不涉及知道如何从基数转换为基数,而是关于实现这一点的好方法.我正在考虑与另一个基地进行另一个bigint的转换以进行打印.
首先,如果没有基本操作(例如除法和模数),就不能以合理的方式进行I/O. 为了提供将bigint转换为base-10字符串的有效实现,我正在研究两种可能的优化:
首先,你可以除以十分之一而不是十分之一.这意味着,每次将数字除以10000时,您将获得四个基数为10的数字.
第二,你如何选择除以10的幂?10,100,1000,10000等等......
似乎有一个很好的选择,即10个最大功率可以适合你的单词(32位).幸运的是,与两个"bigint"相比,你可以更有效地实现一个单词的除法/模数.
我还没有给出实现,因为我还在业余时间研究这个问题,因为我已经在我的库中实现了基本操作,I/O是下一步希望;)