我的世界BCD碼轉(zhuǎn)二進(jìn)制方法介紹,BCD碼轉(zhuǎn)二進(jìn)制的算法其實(shí)很簡單,只是大家都很不熟悉,下面我們就一起來看看我的世界BCD碼轉(zhuǎn)二進(jìn)制方法介紹。
BCD碼,就是用4位一組2進(jìn)制數(shù)來表示10進(jìn)制數(shù),1(0001),2(0010),3(0011),4(0100),5(0101),6(0110),7(0111),8(1000),9(1001)
BCD碼轉(zhuǎn)二進(jìn)制的算法是:abcd=a*1000+b*100+c*10+d
你可能會(huì)覺得很熟悉,小學(xué)應(yīng)該學(xué)過,abcd就是一個(gè)十進(jìn)制數(shù),假如是1234,那么過程就是:1234=1*1000+2*100+3*10+4 因?yàn)?在千位,所以代表有1個(gè)1000,2在百位,所以有2個(gè)100,后面的以此類推
我之前說了,BCD就是用2進(jìn)制來表示的10進(jìn)制,1000的2進(jìn)制數(shù)是1111101000,100的2進(jìn)制數(shù)是1100100,10的2進(jìn)制數(shù)是1010,1234的2進(jìn)制數(shù)是10011010010
所以10011010010=1*1111101000+10*1100100+11*1010+100。
當(dāng)然,這種算法是最常規(guī)的,里面要用到乘法器和加法器,比較麻煩,下面才是正文。
我們可以把a(bǔ)bcd分開輸入,
先輸入a,
然后輸入b并且讓a*10(十進(jìn)制的10)然后把結(jié)果記作a1,
輸入c時(shí)把b*10,結(jié)果記作b1,再把a(bǔ)1*10,結(jié)果記作a2,
最后輸入d,并且把a(bǔ)2*10,b1*10,c*10。
那么就相當(dāng)于a一共乘以了3次10,也就是乘1000
b一共乘以了2次10,就是乘100
c一共乘以了1次10,也就是乘10
這是簡化步驟一,可以看到算法里只需要乘10,減少了乘法運(yùn)算的難度。
接著是步驟二,徹底擺脫乘法器!
這一步驟用到的思想非常重要!很多算法可以依此來簡化!
就是找出一個(gè)數(shù)字*10后的變化規(guī)律,1的二進(jìn)制數(shù)是1,10的二進(jìn)制數(shù)是1010,1*10=10
那么也就是說把二進(jìn)制的1向左分別移動(dòng)1和3次咯,這個(gè)猜想對(duì)不對(duì)呢,我們帶幾個(gè)數(shù)進(jìn)去看看。2的二進(jìn)制數(shù)是10,20的二進(jìn)制數(shù)是10100,符合上文的假設(shè)。3的二進(jìn)制數(shù)是11,30的二進(jìn)制數(shù)是11110,我們得到了個(gè)更嚴(yán)謹(jǐn)?shù)慕Y(jié)論,那就是把“1”分別左移1位和3位,如果有多個(gè)“1”,那么就把多次移位的結(jié)果相加。
提到移位呢,很多人都會(huì)想到移位寄存器,不過不是什么移位都要用它的,移位寄存器一般是用來把一個(gè)數(shù)據(jù)進(jìn)行連續(xù)的左或右移動(dòng),我們這里的移位是要“跨越”的,所以我們不用移位寄存器,用的是D觸發(fā)器(移位寄存器由D觸發(fā)器組成)。
我們用D觸發(fā)器來暫時(shí)儲(chǔ)存加法器的運(yùn)算結(jié)果,然后把D觸發(fā)器的輸出端跨位連接(加法器的輸出1連加法器的輸入2和輸入4),這樣就相當(dāng)于乘了10,記得把所有D觸發(fā)器的時(shí)鐘端連接在一起。
我們的操作方式是逐位輸入,也就是先輸入1個(gè)數(shù),然后同時(shí)給所有D觸發(fā)器的時(shí)鐘端一個(gè)脈沖信號(hào),然后那個(gè)數(shù)字就真正地被輸入進(jìn)去了。
最后是電路圖(沒加數(shù)字輸入部分,輸入是4位二進(jìn)制數(shù),分別就是前4個(gè)加法器的輸入,第4個(gè)輸入有些特殊,要與移位部分的接線分開,避免互相干擾)
藍(lán)色的和綠色的線是一樣的,不用管它;另外,線看起來比較亂,但其實(shí)都是管移位的。