BCD码和⼗六进制
BCD码(Binary-Coded Decimal)亦称⼆进码⼗进数或⼆-⼗进制代码。⽤4位⼆进制数来表⽰1位⼗进制数中的0~9这10个数码。是⼀种⼆进制的数字编码形式,⽤⼆进制编码的⼗进制代码。BCD码这种编码形式利⽤了四个位元来储存⼀个⼗进制的数码,使⼆进制和⼗进制之间的转换得以快捷的进⾏。这种编码技巧最常⽤于会计系统的设计⾥,因为会计制度经常需要对很长的数字串作准确的计算。相对于⼀般的浮点式记数法,采⽤BCD码,既可保存数值的精确度,⼜可免去使电脑作浮点运算时所耗费的时间。此外,对于其他需要⾼精确度的计算,BCD编码亦很常⽤。
BCD码可分为有权码和⽆权码两类:有权BCD码有8421码、2421码、5421码,其中8421码是最常⽤的;⽆权BCD码有余3码,余3循环码等。
8421
8421 BCD码是最基本和最常⽤的BCD码,它和四位⾃然⼆进制码相似,各位的权值为8、4、2、1,故称为有权BCD码。和四位⾃然⼆进制码不同的是,它只选⽤了四位⼆进制码中前10组代码,即⽤0000~1001分别代表它所对应的⼗进制数,余下的六组代码不⽤
BCD码的运算规则:BCD码是⼗进制数,⽽运算器对数据做加减运算时,都是按⼆进制运算规则进⾏处
理的。这样,当将 BCD码传送给运算器进⾏运算时,其结果需要修正。修正的规则是:当两个BCD码相加,如果和等于或⼩于 1001(即⼗进制数9),不需要修正;如果相加之和在1010 到1111(即⼗六进制数 0AH~0FH)之间,则需加 6 进⾏修正;如果相加时,本位产⽣了进位,也需加 6 进⾏修正。这样做的原因是,机器按⼆进制相加,所以 4 位⼆进制数相加时,是按“逢⼗六进⼀”的原则进⾏运算的,⽽实质上是 2 个⼗进制数相加,应该按“逢⼗进⼀”的原则相加,16 与10相差 6,所以当和超过 9或有进位时,都要加 6 进⾏修正
二进制编码转换在程序中,怎么知道⼀个数字是BCD码还是⼗六进制数呢? 1)看数据的来源和⽤途。BCD码⼀般⽤于输⼊和输出,例如来⾃拨码开关的数据是BCD码,送给显⽰电梯楼层的译码器芯⽚的是BCD码。 2)看⼿册的规定,例如数据类型DATE_AND_TIME中的⽇期和时间值是BCD码,计数器的预设值PV和当前计数值CV_BCD为BCD码。怎样监视BCD码?在变量表和程序状态监控中,⽤⼗六进制格式监视BCD码。怎样输⼊BCD码?
可以看出,BCD码⽤⼗六进制格式输⼊,其最⾼位(符号位为16#F(2#1111)。BCD码的低3位各位只能是0~9,如果是16#A~16#F则会出错。计数器的预设值PV是0~999的BCD码,可以⽤格式为C#的常数(C#1~C#999)作为计数器的预设值。下图⽤MW42提供计数器的预设值PV,如果⽤MOVE指令将⼗进制数348(对应的⼗六进制数为16#15C)传送给MW42,进⼊RUN模式时,操作系统将它转换为BCD码时出错(16#15C不是BCD码),不能切换到RUN模式。输⼊预设值348时,应改为将C#348
传送给MW42,它会⾃动地变为W#16#348,当然也可以直接输⼊16#348。没有必要⽤I_BCD指令将348转换为BCD码W#16#348后,再传送给
MW42。