共2条
1/1 1 跳转至页
问
网上能搜到很多现成的程序,
哪位高人能够讲一下转换的原理,越详细越好! 答 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: 学到不少.
哪位高人能够讲一下转换的原理,越详细越好! 答 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 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
vscode+cmake搭建雅特力AT32L021开发环境被打赏30分 | |
【换取逻辑分析仪】自制底板并驱动ArduinoNanoRP2040ConnectLCD扩展板被打赏47分 | |
【分享评测,赢取加热台】RISC-V GCC 内嵌汇编使用被打赏38分 | |
【换取逻辑分析仪】-基于ADI单片机MAX78000的简易MP3音乐播放器被打赏48分 | |
我想要一部加热台+树莓派PICO驱动AHT10被打赏38分 | |
【换取逻辑分析仪】-硬件SPI驱动OLED屏幕被打赏36分 | |
换逻辑分析仪+上下拉与多路选择器被打赏29分 | |
Let'sdo第3期任务合集被打赏50分 | |
换逻辑分析仪+Verilog三态门被打赏27分 | |
换逻辑分析仪+Verilog多输出门被打赏24分 |