多位BCD→B 码组转换方法
- 格式:pptx
- 大小:1.32 MB
- 文档页数:19


BCD码怎么转换成标准二进制形式BCD码怎么转换成标准二进制形式?二进制编码的十进制数,简称BCD码(Binarycoded Decimal). 这种方法是用4位二进制码的组合代表十进制数的0,1,2,3,4,5,6 ,7,8,9 十个数符。
4位二进制数码有16种组合,原则上可任选其中的10种作为代码,分别代表十进制中的0,1,2,3,4,5,6,7,8,9 这十个数符。
最常用的BCD码称为8421BCD码,8.4.2.1 分别是4位二进数的位取值。
点击此处将给出十进制数和8421BCD编码的对应关系表。
1、BCD码与十进制数的转换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码中,它是个非法编码 .2、BCD码的格式计算机中的BCD码,经常使用的有两种格式,即分离BCD码,组合BCD码。
所谓分离BCD码,即用一个字节的低四位编码表示十进制数的一位,例如数82的存放格式为:_ _ _1 0 0 0 _ _ _ _0 0 1 0 其中_表示无关值。
组合BCD码,是将两位十进制数,存放在一个字节中,例82的存放格式是1000 00103、BCD码的加减运算由于编码是将每个十进制数用一组4位二进制数来表示,因此,若将这种BCD码直接交计算机去运算,由于计算机总是把数当作二进制数来运算,所以结果可能会出错。
2421bcd码转换为8421bcd码的变换电路将2421 BCD码转换为8421 BCD码的过程,可以简单地通过逻辑运算完成。
2421 BCD码和8421 BCD码的编码方式如下:2421 BCD码:每一位由4个二进制位表示,其中第1位为最高位(Most Significant Bit, MSB),第4位为最低位(Least Significant Bit, LSB)。
例如,二进制数1001 0000 0000表示十进制数96。
8421 BCD码:每一位由4个二进制位表示,其中第4位为最高位,第1位为最低位。
例如,二进制数0000 0001 0000 0000表示十进制数16。
现在我们以三位BCD码为例来构建一个简单的转换电路。
转换电路输入:三位2421 BCD码(3个4位二进制数)。
输出:三位8421 BCD码(3个4位二进制数)。
步骤步骤1:首先,将输入的2421 BCD码转换为二进制数。
例如,对于BCD码10010000 0000,转换为二进制是1 001 0 000 0 000。
步骤2:接下来,将这个二进制数反转(即第4位和第1位互换,第3位和第2位互换)。
得到0001 0010 0000 0000。
步骤3:最后,将反转后的二进制数转换为8421 BCD码。
得到BCD码12。
重复以上步骤,可以完成三位2421 BCD码到8421 BCD码的转换。
电路实现这个转换过程可以通过逻辑门电路来实现。
具体来说,需要用到与门、或门和非门。
对于每一位的转换,可以通过一个3位的查找表(LUT)来实现,输入是2421 BCD码的每一位,输出是相应的8421 BCD码的每一位。
如果需要N位的转换,只需要扩展查找表的大小即可。
BCD码转换BCD码转换2009-07-15 16:09unsigned int ui;//(16位无符号二进制数)unsigned char uc[5];//(BCD码表示的5位十进制数)uc[4]=(ui/10000)%10;uc[3]=(ui/1000)%10;uc[2]=(ui/100)%10;uc[1]=(ui/10)%10;uc[0]=ui%10;________________________________________________________________ _____今天有人在问我BCD码如何转换成10进制码的问题其实很简单BCD 的表示法是用4个二进制位来表示一个十进制位,也就是一个字节能够表示2个十进制数位,这是一种压缩的十进制表示方式,应用很广,最常见的就是CMOS里的时间存放格式就是BCD码格式,更具体的表示方法大家可以去百度一下就知道了不过其实知道我上面说的就差不多了。
明白了BCD是怎么表示后转换也就容易了,低4位和高4位分别转换然后合并起来就是了!如15用BCD码表示为 0001 0101低四位的值就是实现十进制数的低四,高4位就是高四位的值,这样我们有很高效的转换方法低四位+高四位×10 (上面是2位十进制数的)用C语言表达一下可能更能明白我上面说的意思#include <stdio.h>int main(void){/** 15用BCD码表示为 0001 0101 **/int bcd = 0x15;int dec;dec = (bcd & 15) + ((bcd>>4) * 10);printf("%d\n",dec);return 0;}所以实际转换可以定义成一个宏#define BCDTODEC(bcd)如#include <stdio.h>#define BCDTODEC(bcd) ((bcd) = ((bcd) & 15) + ((bcd)>>4) * 10)int main(void){/** 15用BCD码表示为 0001 0101 **/int bcd = 0x15;BCDTODEC(bcd);printf("%d\n",bcd);return 0;}________________________________________________________________ ______________________#define BCD2BIN(val) (((val) & 0x0f) + ((val)>>4)*10)#define BIN2BCD(val) ((((val)/10)<<4) + (val)%10)/////////////////////////////////////////////////////////////////// ///////////////////////////////函数名:ZH_Data();//返回参数:有.返回为十进制或十进制BCD码.//输入参数:State=0 输入为十进制BCD码输出为十进制.//输入参数:State=1 输入为十进制,输出为十进制BCD码.//设计人:wang1jin.//设计版本:V1.0./////////////////////////////////////////////////////////////////// ///////////////////////////uint8 ZH_Data(bit State,uint8 Value){if(State==0) //判断工作模式.{Value=(Value/16)*10+(Value%16); //把8421BCD码转为十进制return Value; //返回;}else //把十进制转为8421BCD码;{Value=(Value/10)*16+Value%10; //把十进制转为8421BCD 码.return Value; //返回;}}________________________________________________________________ ______________________//16进制转bcd码unchar HEXBCD2(unchar bcd_data) //hex转为bcd子程序{unchar temp;temp=(bcd_data/16*10+bcd_data%16);return temp;}unchar BCD2HEX(unchar hex_data) //BCD转为HEX子程序{unchar temp;temp=(hex_data/10*16+hex_data%10);return temp;}________________________________________________________________ ______________________long str16to10(unsigned char *s){//s字符串最大为"FFFFFFFF"//调用示例:// long lRet; lRet=str16to10("a10"); // -- (结果: lRet=2576) long lRet;unsigned char ch;lRet=0;while (*s){ch=*s;if ((ch >= '0') && (ch <= '9')) ch -= '0';else if ((ch >= 'A') && (ch <= 'F')) ch -= '7';else if ((ch >= 'a') && (ch <= 'f')) ch -= 'W';//lRet=lRet*16+ch;lRet=(lRet<<4)+ch;s ++;}return lRet;}________________________________________________________________ ____________________________sprintf(char,"%x",int);//将10进制转换成16进制sprintf(char,"%o",int);//将10进制转换成8进制________________________________________________________________ ___________________________。
BCD码用4位二进制数来表示1位十进制数中的0~9这10个数码,简称BCD码,即BCD 代码。
Binary-Coded Decimal,简称BCD,称BCD码或二-十进制代码,亦称二进码十进数。
是一种二进制的数字编码形式,用二进制编码的十进制代码。
目录编辑本段定义BCD码这种编码形式利用了四个位元来储存一个十进制的数码,使二进制和十进制之间的转换得以快捷的进行。
这种编码技巧,最常用于会计系统的设计里,因为会计制度经常需要对很长的数字串作准确的计算。
相对于一般的浮点式记数法,采用BCD码,既可保存数值的精确度,又可免却使电脑作浮点运算时所耗费的时间。
此外,对于其他需要高精确度的计算,BCD编码亦很常用。
由于十进制数共有0、1、2、……、9十个数码,因此,至少需要4位二进制码来表示1位十进制数。
4位二进制码共有2^4=16种码组,在这16种代码中,可以任选10种来表示10个十进制数码,共有N=16!/(16-10)!约等于2.9乘以10的10次方种方案。
常用的BCD代码列于末。
编辑本段常用BCD编码方式最常用的BCD编码,就是使用"0"至"9"这十个数值的二进码来表示。
这种编码方式,在中国大陆称之为“8421码”。
除此以外,对应不同需求,各人亦开发了不同的编码方法,以适应不同的需求。
这些编码,大致可以分成有权码和无权码两种:有权BCD码,如:8421(最常用)、2421、5421…无权BCD码,如:余3码、格雷码…以下为三种常见的BCD编码的比较。
十进数 8421-BCD码余3-BCD码 2421-A码(M10) DCBA C3 C2 C1 C0 a3 a2 a1 a00000000110000100010100000120010010100103001101100011401000111010050101100001016011010010110701111010011181000101111109100111001111常用BCD码十进制数 8421码 5421码 2421码余3码余3循环码0 0000 0000 0000 0011 00101 0001 0001 0001 0100 01102 0010 0010 0010 0101 01113 0011 0011 0011 0110 01014 0100 0100 0100 0111 01005 0101 1000 1011 1000 11006 0110 1001 1100 1001 11017 0111 1010 1101 1010 11118 1000 1011 1110 1011 11109 1001 1100 1111 1100 1010-----------------------编辑本段特点8421编码直观,好理解。