如果你发现它很愚蠢,请原谅。我无法理解BCD的目的及其在编程中的实现?
到目前为止,我对BCD的理解是,它是字节或半字节中数据表示的内部方式。在一个简单的C程序中,我们声明变量int,float等,我们按照自己的意愿操作它们。在内部,它们可以表示为二进制数或BCD。
现代计算器仅使用BCD格式。在Intel芯片中,指令FBLD
用于将压缩的BCD值移入FPU寄存器。
我在汇编语言编程中看到了很少的练习,它将BCD转换为十进制和其他方式。
它如何帮助程序员知道?
BCD知识对高级语言程序员有用吗?
答案 0 :(得分:1)
BCD完全符合它的名称:B
inary C
oded D
ecimal。实质上,这意味着,不是每4位存储一个十六进制数字,我们只存储一个十进制数字,浪费剩余的空间。
执行此操作的重点主要是算术,在十进制系统中需要完美(在最小舍入误差的意义上),但在十进制(或二进制)系统中,当观察十进制后的数字时点。
以前,这在例如会计软件,但它已经成为一个无问题的自然词长度变大。今天的解决方案通常使用1/10或1/100分的整数运算。
另一个以前的用途是促进更容易与7段LED显示器连接 - 用BCD编码的数字可以半字节显示半数,而二进制表示需要模运算。
我相信,在今天的世界中,只有在非常特殊的情况下,你才会在某种程度上遇到BCD。
答案 1 :(得分:1)
C中没有BCD格式,但您可以将其存储在普通二进制变量中并以十六进制打印。
在过去,BCD主要用于存储不经常参与计算的十进制值(尤其是会计软件,如Eugen Rieck所说)。在这种情况下,输入和输出中的十进制和二进制之间的转换成本可能会超过由于分割缓慢或缺少硬件除数而使用的简单计算的成本。一些旧架构也可能有BCD算术的说明,因此BCD可用于提高性能
但是现在几乎没有问题,因为大多数现代架构已经放弃了对BCD数学的支持,而在较大的寄存器(> 8位)中这样做可能会导致性能下降
答案 2 :(得分:0)
英特尔芯片内部不使用BCD表示。它使用二进制表示,包括负整数的2补码。但是,它有一些指令,如AAA,AAS,AAM,AAD,DAA,DAS,用于将无符号整数值上的加,减,乘和除的二进制结果转换为unpacked /打包BCD结果。因此,英特尔芯片可以间接生成无符号整数的BCD结果。这些指令使用AL寄存器中的隐含操作数,并将转换结果放在AL寄存器中。有一些先进的BCD处理指令,可以将80位打包的带符号BCD格式值从存储器移入FPU寄存器,然后自动转换为二进制形式,处理并转换回BCD格式。