为什么会有BCD码以及余三码的优点详解

一、为什么会有BCD码

1.什么是BCD码

以8421BCD码为例,8421BCD码是对十进制的表示,4位8421BCD码能表示的范围也就对应十进制的0-9;如1为0001,9为1001,而对于多位十进制数如15则表示为0001 0101。

2.BCD码的存在意义

那为什么要有BCD码,不直接用十进制数对应的二进制?可以参考下面的文章:

十进制数的编码与运算 - 电子常识 - 电子发烧友网 (elecfans.com)

人们习惯使用10进制数,而在计算机内,采用二进制表示和处理数据更方便。因此,在计算机输入和输出数据时,要进行十→二和二→十的进制转换处理,这是多数应用环境中的实际情况。而在某些特定的应用领域中,如商业统计,其特点是运算简单而数据量很大,这样使输入输出过程中的进制转换所占的时间比例很大。从提高机器的运行效率考虑,也可以采用在计算机内部直接用十进制方式表示和处理数据,这要求计算机内部增加少量硬件线路。目前,大多数通用性较强的计算机,都能直接处理十进制形式表示的数值。

总结来说就是对于运算简单但是数据量很大的计算过程,如果采用原有的十进制数转二进制数,会由于转换过程消耗掉很多时间,因此直接采用将数据bit划分,如用4bit二进制数表示十进制数的一位,这样大大缩减了转换时间。

还有一个原因就是十进制数字符0~9的8421码与相应ASCII码的低四位相同,有利于简化输入输出过程中BCD码与字符代码的转换。

3.十进制数串在计算机中的表现形式

十进制数串在计算机内主要有两种表示形式:

  • 以字符串形式存在,一个字节低4bit存放其数值,高4bit运算时无意义;这种情况下会造成对存储空间的浪费;
  • 压缩的十进制数字符串形式,每4bit表示十进制数的一位,然后将整体的符号用4bit放在数值之后。那数值如何表示?一般选用冗余值,如8421BCD码中,1010~1111为冗余位(因为能表示的十进制数只有0-9),选择1100(16进制C)表示正数,1101(16进制D)表示负数。此外,规定数值位个数+符号位个数的数值为偶数,否则在高位补0(不影响数值大小)。个人认为这样其实是方便对齐,便于读写操作。如+100,则其直接加上符号位1100即C,则最终表示为100C,而+10就需要变为010C;对于-10就需要以010D来表示。

二、余三码的优点

余三码是对10进制数的各位对应的8421BCD码单独加3得到的,如十进制15的8421BCD码为0001 0101,余三码为0100 1000。

接下来说说余三码的作用:

如果是5+5,我们用8421BCD码表示

0101

+0101

=1010

此时超出了BCD码的表示范围。

而用余三码表示:

1000

+1000

=1 0000

进位的情况下刚好表示10的BCD码。

这是因为对余三码来说,十进制的1-9,2-8,3-7,4-6,5-5相加为10刚好产生进位,对应的余三码刚好相加为16也产生进位,这样方便计算。

而一般将计算结果也表示为余三码,则有如下规则

  • 如果产生进位,则将各位都单独+3,则上述计算结果变为0100 0011;
  • 如果没有进位,则减掉3,因为两个余三码相加最终相当于是对BCD码+6,因此要退回3。如1+1=2,余三码表示为0100+0100=1000,退回3变为0101,对应的BCD码为0010刚好为2。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值