low-level - 打印一个十进制数

标签 low-level number-formatting

嗯,这是一个低级问题 假设我存储一个数字(当然计算机以二进制格式存储数字) 如何以十进制格式打印它。这在高级程序中是显而易见的,只需打印它,库就会为您完成。

但是在我没有这个库的非常低级别的情况下怎么样? 我只能知道要输出什么“字符”。如何将数字转换为十进制字符?

希望你能理解我的问题。谢谢。

最佳答案

有两种打印小数的方法 - 在具有除法/取数指令的 CPU 上(现代 CPU 就是这样),以及在除法相对较慢的 CPU 上(20 多年前的 8 位 CPU)。

第一种方法很简单:将数字整除以 10,并将余数序列存储在数组中。将数字一直除到零后,开始从后面开始打印余数,并将 ASCII 代码零 ('0') 添加到每个余数。

第二种方法依赖于十的幂查找表。您定义一个数字数组,如下所示:

int pow10 = {10000,1000,100,10,1}

然后你从最大的幂开始,看看是否可以从手头的数字中减去它。如果可以的话,继续减去它,并保留计数。一旦您无法在不减负数的情况下减去它,请打印计数加上 0 的 ASCII 代码,然后继续计算下一个更小的 10 次幂。

关于low-level - 打印一个十进制数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8491945/

相关文章:

c# - C#数组如何处理内存?

javascript - 为什么我的 toFixed() 函数不起作用?

c++ - 通过 GNU 扩展 asm 约束加载 64 位整数常量?

Java 数字格式

c++ - 没有 stringstream 的逗号分隔数

c# - 如何在 C# 中查找指数格式的字符串值?

c# - 自定义字符串格式,数字到时间

c - 使用 ps aux,进程 11558 和 16290 的路径位于括号中 : "(dd)" and "(security_authra)". 这些是什么?

printf 后将变量内容转换为指针结果为 NULL

c++ - 虚拟文件系统设计