BCD码怎么转换成标准二进制形式?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BCD码怎么转换成标准二进制形式?相关的知识,希望对你有一定的参考价值。
多谢啦!
通常我们默认的BCD码为8421码,即用4位二进制数来表示1位十进制数中的0~9这10个数码,从左到右的权为8、4、2、1。
以十进制37为例,进行转换:
3=2+1=(8421码)0011,7=4+2+1=(8421码)0111。
所以37转换成8421码为0011 0111。
扩展资料:
BCD码这种编码形式利用了四个位元来储存一个十进制的数码,使二进制和十进制之间的转换得以快捷的进行。这种编码技巧最常用于会计系统的设计里,因为会计制度经常需要对很长的数字串作准确的计算。
相对于一般的浮点式记数法,采用BCD码,既可保存数值的精确度,又可免去使电脑作浮点运算时所耗费的时间。此外对于其他需要高精确度的计算,BCD编码亦很常用。
BCD码的最高位二进制数是符号位,负数的符号位为1,正数为0。16位BCD码的范围为–999~+999。
BCD码没有单独的表示方法,而是借用了十六进制的表示方法,因此二者很容易混淆。通常用以下两种方法去判断:
1、看数据的来源和用途。BCD码一般用于输入和输出,例如来自拨码开关的数据是BCD码,送给显示电梯楼层的译码器芯片的是BCD码。
2、看手册的规定,例如数据类型DATE_AND_TIME中的日期和时间值是BCD码,计数器的预设值PV和当前计数值CV_BCD为BCD码。
参考资料:
BCD码——百度百科
8421码——百度百科
参考技术Abcd码就是0-9共10个数字,对应的二进制码就是0000-1001。如7对应0111;26对应0010 0110;456对应0100 0101 0110,其文件运行如图所示。
如果每位BCD码使用一个字节(8位),那么:
7对应0000 0111;26对应0000 0010 0000 0110;456对应00000100 00000101 00000110。
扩展资料:
BCD码与十进制数的转换 :将十进制数75.4转换为BCD码如:
75.4=(0111 (0101.0100)BCD 若将BCD码1000 0101.0101转换为十进制数如: (1000 0101.0101)BCD=85.5
注意:同一个8位二进制代码表示的数,当认为它表示的是二进制数和认为它表示的是二进制编码的十进制数时,数值是不相同的。
例如:00011000,当把它视为二进制数时,其值为24;但作为2位BCD码时, 其值为18。
又例如00011100,如将其视为二进制数,其值为28,但不能当成BCD码,因为在8421BCD码中,它是个非法编码。
参考资料:百度百科-BCD码
参考技术B转化标准二进制方法如下,直接用例子来回答:
实例分析:十进制数 29;
用BCD码表示:十位上的十进制数为 2 == BCD码表示为 0010;个位上的十进制数9 === BCD码表示为 1001;所以总的来说 十进制数 29 用BCD码表示为:0010 1001
转换过程:把BCD码 0010(十进制数为十位上的 2)右移4位(其实表示当作一个个位数,或者说单纯的数值),然后乘以10 还原到十进制的权重(因为这个数本来表示的就是十进制数中的十位)。处理完十位上的数,接着处理个位上的数。
因为BCD码的权重和二进制的前四位权重是一样(2^n,n为位数),所以直接用前面的十位上的数加上它就可以了。
简单点分析:0010(十位上的2 BCD码表示)× 10 + 1001(个位上的9 BCD码表示)= 29的二进制数
C代码表示:#define BCD_TO_BIN(val) ((((val) >> 4) * 10) + ((val)&15))
BCD码是用4位二进制数(各个位的权重分别为:8421,所以叫8421码)来表示一位十进制数。这里的一位十进制数要特别说明下,一位十进制数只能是 0~9之间的一个数值。比如:6 就是表示一位十进制数6;66则是表示两位十进制数;666则是表示三位十进制数。
扩展资料:
BCD码的特点:
1、8421编码直观,好理解。
2、5421码和2421码中大于5的数字都是高位为1,5以下的高位为0。
3、余3码是8421码加上3,有上溢出和下溢出的空间。
4、格雷码相邻的2个数只有一位不同。
BCD码的运算规则:
BCD码是十进制数,而运算器对数据做加减运算时,都是按二进制运算规则进行处理的。这样,当将 BCD码传送给运算器进行运算时,其结果需要修正。
修正的规则是:当两个BCD码相加,如果和等于或小于 1001(即十进制数9),不需要修正;如果相加之和在 1010 到1111(即十六进制数 0AH~0FH)之间,则需加 6 进行修正;如果相加时,本位产生了进位,也需加 6 进行修正。
这样做的原因是,机器按二进制相加,所以 4 位二进制数相加时,是按“逢十六进一”的原则进行运算的,而实质上是 2 个十进制数相加,应该按“逢十进一”的原则相加,16 与10相差 6,所以当和超过 9或有进位时,都要加 6 进行修正。
参考资料:百度百科——BCD码
参考技术C可以用加3移位法转换:
bcd码中只有0~9十进制数,但是在四位二进制中是16进制进1,因此在移位过程中要对二进制进行判断,当在移位之后的状态Qn+1大于9,要对Qn加6才可以。
例如:1000移位大于9加6为0001_0110,对应bcd码中的16。
也可以在移位之前进行判断,如果移位之前的Qn数据大于4,说明Qn+1会溢出,所以可以+3再进行移位,例如1000大于4,加3为1011然后再进行移位0001_0110,16和刚才结果是一样的。
简单的说,判断的目的是防止下一次移位,发生数据溢出的情况。
扩展资料:
1、BCD码的格式
计算机中的BCD码,经常使用的有两种格式,即分离BCD码,组合BCD码。所谓分离BCD码,即用一个字节的低四位编码表示十进制数的一位,例如数82的存放格式为:_ _ _1 0 0 0 _ _ _ _0 0 1 0 其中_表示无关值。
组合BCD码,是将两位十进制数,存放在一个字节中,例82的存放格式是1000 0010
2、BCD码的加减运算
由于编码是将每个十进制数用一组4位二进制数来表示,因此,若将这种BCD码直接交计算机去运算,由于计算机总是把数当作二进制数来运算,所以结果可能会出错。
例:用BCD码求38+49。
解决的办法是对二进制加法运算的结果采用\\加6修正,这种修正称为BCD调整。即将二进制加法运算的结果修正为BCD码加法运算的结果,两个两位BCD数相加时,对二进制加法运算结果采用修正规则进行修正。
参考资料来源:BCD码-百度百科
参考技术DBCD码(也称为8421码)转二进制
用实例分析:十进制数 19;
用BCD码表示:十位上的十进制数为 1 == BCD码表示为0001;个位上的十进制数9 === BCD码表示为 1001;所以总的来说 十进制数 29 用BCD码表示为:0001 1001
转换过程:把BCD码 0001(十进制数为十位上的 1)右移4位(其实表示当作一个个位数,或者说单纯的数值),然后乘以10 还原到十进制的权重(因为这个数本来表示的就是十进制数中的十位)。处理完十位上的数,接着处理个位上的数。
因为BCD码的权重和二进制的前四位权重是一样(2^n,n为位数),所以直接用前面的十位上的数加上它就可以了。
扩展资料:
BCD码(Binary-Coded Decimal)亦称二进码十进数或二-十进制代码。用4位二进制数来表示1位十进制数中的0~9这10个数码。是一种二进制的数字编码形式,用二进制编码的十进制代码。
BCD码这种编码形式利用了四个位元来储存一个十进制的数码,使二进制和十进制之间的转换得以快捷的进行。这种编码技巧最常用于会计系统的设计里,因为会计制度经常需要对很长的数字串作准确的计算。
相对于一般的浮点式记数法,采用BCD码,既可保存数值的精确度,又可免去使电脑作浮点运算时所耗费的时间。此外,对于其他需要高精确度的计算,BCD编码亦很常用。
参考资料:百度百科——BCD码
BCD码转换为十进制或者十进制转为BCD码
BCD码其实就是之前在数字电路中说的 用4位二进制数值 来表示一个0-9中的数字,
例如: 0000=0 0001=1 0010=2 0011=3
也就是说如果把一个数字作为一个BCD码,例如: 11 22
那么他应该展开为: 00010001 00100010
也就是对应为十进制: 17 34
所以一个BCD吗转为十进制数据的思想就是: 将BCD码每个数字分离出来,例如上面的11
将十位的1分离出来然后右移4位乘上一个10 在加上 个位的数字即可。十进制转BCD码的
思想:将这个十进制数字用二进制表示,高4位表示的数字是多少 * 10再加上低四位表示
的数字,C程序如下:
#define BCD_to_Decimal(bcd) ((((bcd) / 10) >> 4) + (bcd) % 10);
#define Decimal_to_BCD(int dec) (((0xf0 & (dec)) >> 4)*10 + (0x0f & (dec)))
以上是关于BCD码怎么转换成标准二进制形式?的主要内容,如果未能解决你的问题,请参考以下文章