这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » BCD 二进制与BCD码的转换?

共2条 1/1 1 跳转至

BCD 二进制与BCD码的转换?

院士
2006-09-17 18:14:16     打赏
BCD 二进制与BCD码的转换?



关键词: 二进制     转换    

院士
2006-12-22 22:43:00     打赏
2楼
问 网上能搜到很多现成的程序,
哪位高人能够讲一下转换的原理,越详细越好! 1: 就是除法运算吧。例如,结果为43,除以10,余数为3,商为4。分别把他们保存起来就行了。 2: 反过来呢,如果小于10呢? 3: ...先转化为十进制,再转化为BCD码.例:二进制数11011011,转化为十进制数为219.再分别用四位二进制数表示219的个十百位,百位2为:0010;十位1为:0001;个位9为1001.把它们拼起来就可以了.即:二进制数11011011的BCD码是:001000011001. 4: 小于10也一样啊,只不过商为0而已。 5: likee 的办法可行. 6: 推荐俺的笔记看看 7: 8: 上帖不好看.....[入门快车]Q042:有什么学好二进制数的经验和方法?|||阅读全文(2092) | 回复(6) | 引用(0)

^&^点击图片 看清晰大图 iC921 发表于 2006-2-20 16:45:00 


Q:10-2进制数转换有什么学好的经验和方法?


--------------------------------------------------------------------------------
Q042:有什么学好二进制数的经验和方法?|||

A:一般人确实比较烦这个,也不知道学过没几天就忘了。二进数是我们经常接触的,想到熟悉它们,是好事,值得称道。学习二进制数的难点主要有二:一是如何熟悉二进制数,二是如何便捷地将10进制数转换成2进制数。下面我我的体会和经历试讲讲这两个问题,不知道对你是否适合,看过再说吧。

第一个难点:如何熟悉二进制数?

据我接触,二进制数很多人都觉得它“烦”,其实并不然,只要你用心一下就容易解决的。我过去去熟悉二进制数的方法是先在5位二进制数上做学问,以后再慢慢熟悉其它位数更多的二进制数。

具体是,分别5个手指各代表16、8、4、2、1这5个数,亦即----

假定..拇指代表 16
......食指代表 8
......中指代表 4
....无名指代表 2
......小指代表 1      

这样闲下心来就试一下用自己的手指伸屈来凑合 0~31 这32个数。这种一个手掌可以代表/表示32个数的玩法非常有意思。我最早发现这种方法时,曾经在北京的同学家教过小朋友,想不到见多识广的她竟然说非常好玩。有空不妨找小朋友或女朋友/男朋友试试。如果愿意,可以用我们的10个手指计算/表示0~1023这1024个数。

我觉得,上述玩法确实是一种不错的、熟习知识的“游戏”。

  
--------------------------------------------------------------------------------


第二个难点:十进制数→二进制数的转换

二进制数与十进制数的转换,无论是初学计算机还是日常工作中,口算或笔算都不时会在各种场合中遇到。但十进制数→二进制数的转换是这一块知识的“难点”,不少人老觉得做十进制数→二进制数的转换太过于“棘手”,因此,关于二进制数的转换我们只谈10→2进制数的转换问题,其它如8进制、16进制不难或少遇到,就免了。


我们经常遇到比如要135这样的数转换成二进制数。书上告诉了我们转换的办法,如短除法之类,可是这些方法太麻烦,不好使,也容易搞错,口算正确率低。其实,如果你曾经练习过上面的第一个“问题”----掌算二进制数,那么,了解我下面提到的方法后,一下子就能智能它的结果是1000 0111,也就是128+4+2+1=128+7=135

不要习惯于书上讲的方法,请大家学习我下面的方法----算术比较法:

我们设一个数为x,如果它小于256,请用以下8个数“逐步”进行比较:128,64,32,16,8,4,2,1。具体是:如果x大于128,则D7为1否则为0,将x减去128得x1,让x1与64比较,如果x1大于64,则D6为1否则为0,...,依次类推,直至判断出D0是0还是1。

根据这种方法,将135转换成二进制数的过程如下:

∵ 135>128,∴D7=1; 计算 135-128=7

继续依次计算其它各位的结果如下:

∵  7<64,  ∴ D6=0
∵  7<32    ∴ D5=0
∵  7<16    ∴ D4=0
∵  7<8     ∴ D3=0
∵  7>4,   ∴ D2=1; 计算 7-4=3
∵  3>2     ∴ D1=1; 计算 2-1=1
∵  1-1=0   ∴ D0=1;计算 1-1=0 转换结束

实际上,如果熟悉稍为一些二进制数,一眼就会看出 7=(0111)2 ,所以,第一步计算135-128=7完后,最后结果 1000 0111 也会马上得出,没有必要做后来的那么多步计算,这远比用短除法简单方便,还容易理解容易记忆。


当然啦,在我带过的实习生中,都是比较称道我的上述方法的。


--------------------------------------------------------------------------------


附:趣味了解

1) 二进制数的权是一个特殊的数列:任一项都是前一项的2倍,任一项都是前各项之和再加上1。

2) 二进制数是最省存储信息的,在我了解二进制数前,我姨父曾有一道题我“为难”过:1000个水果,放10个箩筐,要求今天放好,明天让人来拿,到时不管人家要你拿多少个你都得一箩筐一箩筐地拿出来。

做这道题当然不能怕有的箩筐放1个2个的,因为人家要1个2个这种可能是存在的。为了达到在1000个以内能随意拿出任意个数的要求,只能按二进制数的方法进行下去:

第1筐    1个
第2筐    2个
第3筐    4个
第4筐    8个
第5筐   16个
第6筐   32个
第7筐   64个
第8筐  128个
第9筐  256个
...........以上合计511个

第10筐  1000-511 = 489个

因489<512,故上述算法(存放法)成立

这样,就可以满足要多少个都能整筐地给的要求----如果0个,有谁不懂呢?!

(原创 by iC921@2006.02.20 )


9: 没看出来老乡挺能数数的,佩服 10: 我倒,没准使人越听越悬乎,同意LIKEE的方法我倒,没准使人越听越悬乎,同意LIKEE的方法 11: LIKEE的例子的补充BCD码最基础的就是8421码,likee举的例子就是这种.
如  1001=8*1+4*0+2*0+1*1=9
<先转化为十进制,再转化为BCD码.例:二进制数11011011,转化为十进制数为219.再分别用四位二进制数表示219的个十百位,百位2为:0010;十位1为:0001;个位9为1001.把它们拼起来就可以了.即:二进制数11011011的BCD码是:001000011001. LIKEE的例子>

12: 谢谢补充,我再补充呵呵,简单实用就好,8421码可以用四个二进制数表示16个数,但在BCD码中只取0到9,即:0000到1001.如果谁在每四位分配的时候分到1010到1111那这个BCD码一定错了(当然前提要分对). 13: 有意思,获益匪浅 14: bcd code本人觉得没有必要死记,需要时查查即可。
用的多了,就知道了 15: 长见识了书上讲了一大堆,还是不明白
今天看了看,马上明白了
替楼主谢谢各位大虾了! 16: 我也做过,大家看我这样做行不行我也做这样的程序.把一个二进制数转化为4位BCD码.
可以这样做,就是把这个二进制数去除以1000商为4位BCD码的千位,再用余数去除以100商为BCD码的百位,余数再去除以10商为BCD码的十位,余数放在个位,这样一个不大于999的二进制数就转化为了BCD码了。呵呵不知这样有没有人用过,我这可是自己想出来的。并成功用在了一个LED显示的程序上。 17: 楼上的朋友的方法与圈圈提出的方法一致,我也曾用这种除法做了LED显示。 18: 真的学到了不少 19: 学到不少.

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]