假设我有 16 个 64 位无符号整数。在执行操作时,我一直小心翼翼地在他们之间适当地喂进进位。我可以将它们输入一种方法,将它们全部转换为一个十进制数字字符串,就好像它是一个 1024 位二进制数一样?换句话说,是否有可能制作一种适用于表示一个更大整数的任意数量整数的方法?
我想有符号整数会更困难,因为要处理最重要的位。我想最重要的整数将是有符号整数,其余的将是无符号的,以表示数字的剩余“部分”。
(这与另一个问题半相关。)
假设我有 16 个 64 位无符号整数。在执行操作时,我一直小心翼翼地在他们之间适当地喂进进位。我可以将它们输入一种方法,将它们全部转换为一个十进制数字字符串,就好像它是一个 1024 位二进制数一样?换句话说,是否有可能制作一种适用于表示一个更大整数的任意数量整数的方法?
我想有符号整数会更困难,因为要处理最重要的位。我想最重要的整数将是有符号整数,其余的将是无符号的,以表示数字的剩余“部分”。
(这与另一个问题半相关。)
您可以使用双重涉猎算法,它规避了对多精度乘法和除法的需求。事实上,维基百科页面包含该算法的 C 实现。
这有点不清楚。
当然,这样的功能
void print_1024bit(uint64_t digits[]);
可以写来做到这一点。但是,如果您的意思是任何标准库的printf()
-family 函数都可以做到这一点,那么我认为答案是否定的。
正如您可能在另一个问题中看到的那样,将二进制数转换为不同的基数b的核心由两个操作组成:
当应用到数字为 0 时,这会以相反的顺序生成所有数字。
因此,您需要为您的 1024 位数实现“模 10”和“除以 10”。
例如,考虑十进制数 4711,我们想将其转换为八进制,仅用于此示例:
因此,从底部向上到最右边的数字读取粗体数字,我们得出结论 4711 10 = 11147 8。您可以使用计算器来验证这一点,或者相信我。:)