BCD码使用4位二进制数来表示十进制中0~9这10个数的数码。例如,十进制的237,其BCD码就是 0010_0011_0111 ,但是其二进制是 1110_1101 。
我们先来研究两个4位的BCD码相加的情况。设这两个BCD码对应的十进制是a,b,其中a,b∈{0,1,2,...,9}。此时只有3种情况:
也就是说:
第一种情况显然不需要再修正。
第二种情况,例如,5+8=13,我们希望得到BCD码是 0001_0011 ,但是运算结果 1101 ,因此如果我们加上了6,就可以得到正确结果: 1101 + 0110 = 0001_0011 。这是因为,十进制是逢十进一,但是4位BCD加法,在看作是二进制数做加法时,是逢十六进一。因此,如果结果是10≤a+b≤15,加上6以后就是16+0≤a+b+6≤16+5,此时因为逢十六进一的原因,就得到了结果 1_0≤[a+b+6]≤1_5 ,这个结果就是对的。
第三种情况,因为16≤a+b≤18,逢十六进一后,我们得到了 1_0≤[a+b]≤1_2 ,为了使结果正确,如果我们加上一个修正值6,就得到 1_6≤[a+b+6]≤1_8 ,从而结果也变得正确。
综上所述,如果两个BCD码相加:
考虑一个例子,比如 35+99=134。35和99的BCD码分别是 0011_0101 和 1001_1001 。先计算低4位: 0101 + 1001 = 1110 ,因为这个值大于9,因此加上6作为修正: 1110 + 0110 = 1_0100 。现在计算高四位,同时注意到还有一个进位: 0011 + 1001 + 0001 = 1101 ,这个值还是大于9,加上6,得到 1101 + 0110 = 1_0011 。因此最终结果是 1_0011_0100 ,这刚好就是134的BCD码。
我们之所以能够安全地加上进位,是因为BCD加法比照的就是十进制的加法,只不过前者是4位为一个单位,而后者是以1位数字作为一个单位。加上修正值后,BCD加法的进位就相当于十进制加法的进位。图示如下:
给定一个二进制数,要转BCD码。一个常用算法就是不断将该数除以10,以此依次分解出个位、十位、百位……上的数字,这些数字的4位二进制数就是对应的BCD。但是这样的算法需要不断做除法操作十分的麻烦。我们可以使用名为 加三左移法 来完成。
这个算法基于以下的事实:
一个n位二进制数 ,其展开是 如果使用秦九韶算法的嵌套形式写法,可以写成: 或者若令 则 如果使用这种形式,我们先计算的是 ,然后是 ,然后是 ,……,最后是 。
注意到 就是把 左移1位,这样就会在最右边空出一个位,之后再加 就是用 填充这个最低位,从而我们得到了 。不断左移,最终就能得到 ,现在我们来设计一个算法使得左移结束后能得到对应的BCD码。
设 是一个无限长的、初始状态为所有位都是0的理想寄存器, 是欲转换的数。我们使用下面的 归纳法 来构造证明我们通过不断左移最终能够得到存储在 中的 对应的BCD码:
由数学归纳原理,移动 len(h) 次后,我们最终可以得到 的BCD码。
作为一个例子,考虑使用该算法将 的二进制 1000_0110 转为BCD码:
现在, 已经全部移入,此时 的值就是 0001_0011_0100 ,它就是 的BCD码。
C语言的算法如下:
先转化成10进制数,因为1个8421码字,即BCD码字,对应1个十进制数字
11011011.1101对应的数字是219.8125
那么它对应的8421码是(二进制)
0010 0001 1001 . 1000 0001 0010 0101
对应的十六进制数正好是
219.8125
二进制转换8421BCD的思路如下:
给定一个二进制数,要转BCD码。一个常用算法就是不断将该数除以10,以此依次分解出个位、十位、百位??上的数字,这些数字的4位二进制数就是对应的BCD。但是这样的算法需要不断做除法操作十分的麻烦。可以使用名为加三左移法来完成。
这个算法基于以下的事实:
一个数乘以2,相当于其二进制左移1位;两个BCD码相加,如果结果大于9,需要加上6作为修正。
扩展资料
BCD码的求和:
BCD码使用4位二进制数来表示十进制中0~9这10个数的数码。例如,十进制的237,其BCD码就是0010_0011_0111,但是其二进制是1110_1101。
我们先来研究两个4位的BCD码相加的情况。设这两个BCD码对应的十进制是a,b,其中a,b∈{0,1,2,...,9}。此时只有3种情况:
1、0≤a+b≤9;
2、10≤a+b≤15;
3、16≤a+b≤18。
1、首先输入16进制数据或ASCII数据,可通过按钮控制数据转换方向。界面布局如图。
2、“----”表示将ASCII码转换为16进制数据。此按钮通过split将约定“ ”隔开的字符放入string字符串,再通过ToCharArray将字符串转换为字符数组,最后将字符数组依次转换为十进制、16进制数据显示即可。
3、“----”表示将十进制数据转换为ASCII码。按照约定Split(' ')分割字符,取出十进制数据,将十进制数据转换为ASCII字符,再组合显示即可。
4、由于16进制和十进制实时更新,便于观察,故需要触发TextChanged事件。
5、最后显示效果如图,输入十六进制/十进制数据,点击“----”可转换得到ASCII码,输入ASCII码,点击“----”可转换得到十六进制/十进制数据。
利用excel中开发工具的控件可把数字变成条形码,具体操作请参照以下步骤。
1、在电脑上打开excel文件,依次点击菜单栏选项“开发工具/插入”。然后点击ActiveX控件栏右下角的“其他控件”图标。
2、在出现的“其他控件”对话框中选择Microsoft Barcode Control 15.0,然后点击确定。
3、接着用鼠标在EXCEL表格上拖动就会出现一个默认的条形码,选中条形码后右击鼠标,在右键菜单中依次点击“Microsoft Barcode Control 15.0对象/属性”。
4、在出现的属性对话框中找到样式选项,在其下拉框中选择“7-code-128”,然后点击确定。
5、在A10表格内输入数字信息“999999999”,接着鼠标右键点击条形码,在右键菜单点击“属性”选项。然后在弹出的属性对话框中的Linkecell栏中输入a10即可。完成以上设置后,即可在EXCEL中把数字变成条形码。
扩展资料
条形码(barcode)将宽度不等的多个黑条和空白,按照一定的编码规则排列,用以表达一组信息的图形标识符。常见的条形码是由反射率相差很大的黑条(简称条)和白条(简称空)排成的平行线图案。
条形码可以标出物品的生产国、制造厂家、商品名称、生产日期、图书分类号、邮件起止地点、类别、日期等许多信息,因而在商品流通、图书管理、邮政管理、银行系统等许多领域都得到广泛的应用 。
条形码技术的应用解决了数据录入和数据采集的瓶颈问题,为物流管理提供了有利的技术支持。条形码是由一组规则的条空及对应字符组成的符号,用于表示一定的信息。
条形码的使用管理。条形码的使用必须遵守一定的管理程序,以确保条形码符合相应的规定。条形码的使用管理一般需要经过以下程序 。
厂商申请厂商代号。采用条形码的厂商,特别是商品生产的厂商,向条形码编码中心及各地分支机构申请厂商代码 。
编码中心核发厂商代号。条形码编码中心对申请者的申请表单及文件进行审核后,发给其登记证书及厂商代号,并附赠印制条形码的相关技术资料。
设定商品代号。申请厂商可依商品代号设定原则自由设定商品代号,并且通过计算求得校验码,该商品代号和校验码形成商品条形码的编号。
印制条形码。根据条形码印刷或打印的有关规定,厂商与印刷厂商协商或者自行用打印机将条形码符号印制于包装材料上。
分发基本资料一览表。厂商将含有条形码编号的商品基本资料一览表分发给零售商、批发商等交易环节的参与者。
十进制数换算成8421BCD码的方法如下:
1、十进制换算BCD码,整数从右边开始,每个数是4位二进制代码。比如:(195)10=(1 1001 0101)BCD,小数和其他进制转换不一样,是数位换算:(0.28)10=(0.0010 1000)BCD。
BCD码换算成十进制数的方法如下:
1、BCD码与十进制数的转换关系很直观,相互转换也很简单,将十进制数75.4转换为BCD码:7-0111,5-0101,4-0100所以拼成8421BCD码的结果是:(0111 0101.0100)BCD;若将BCD码1000 0101.0101转换为十进制数:1000-8,0101-5,0101-5所以结果是:(85.5)D。
二进制编码的十进制数,简称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位二进数的位取值。