我知道如何将二进制转换为十进制.我知道至少2种方法:桌子和电源;-)
我想将二进制转换为十进制并打印此十进制.而且,我对这个"十进制"不感兴趣; 我想要打印它.
但是,正如我上面所写,我只知道将二进制转换为十进制的两种方法,并且它们都需要添加.所以,我在二进制中计算1或0的某个值,并将其添加到记忆值.这是一个很薄的地方.我有一个非常大的数字(1和64个零).转换时我需要在某些"变量"中放置一些中间结果.在C中,我有一个`int'类型,它只有4个字节,不超过10 ^ 11.
因此,在从二进制转换为十进制时,我没有足够的内存来存储中间结果.正如我上面所写,我对这个小数点不感兴趣,我只想打印结果.但是,我没有看到任何其他方法来解决它;-(是否有任何解决方案从二进制"只打印"?
或者,也许,我应该使用类似BCD(二进制编码的十进制)的东西进行中间表示?我真的不想用这个,因为它不是那么跨平台(英特尔的处理器有内置功能,但对于其他我需要编写自己的实现).
我很高兴听到你的想法.谢谢你的耐心等待.
语言:C
我强烈建议使用GMP(GNU multiprecision库)等库.您可以使用mpz_t大整数的数据类型,各种导入/导出例程来获取数据mpz_t,然后使用mpz_out_str()它在10中打印出来.
最大的标准整数数据类型是unsigned long long int- 在我的系统(x86 上的 32 位 Linux)上,它的范围为 0 - 1.8*10^20 这对你来说还不够,所以你需要创建自己的类型(结构体或数组)并编写该类型的基础数学(基本上你只需要添加)。
如果我是你(并且内存不是问题),我会使用数组 - 每个十进制数字一个字节,而不是 BCD。BCD 更紧凑,因为它每个字节存储 2 个十进制数字,但您需要花费更多的精力分别处理高半字节和低半字节。
要打印,您只需将'0'(字符,而不是数字)添加到数组的每个字节中,您就会得到一个可打印的字符串。
| 归档时间: |
|
| 查看次数: |
7960 次 |
| 最近记录: |