前言
????????最近在看C++的基礎(chǔ)知識疫稿,突然看到了十進(jìn)制轉(zhuǎn)換二進(jìn)制的算法狱庇, 突然讓我回憶起了之前經(jīng)常提及的“8421碼”鉴逞,讓我情不自禁地重新?lián)炱鹚乃惴ㄖ剑?dāng)時(shí)接觸這個(gè)算法,真的是驚為天人脏里,如今,再來學(xué)習(xí)虹曙,真的發(fā)現(xiàn)了其中非常有趣和魅力,現(xiàn)在和大家分享我的所獲吧8酢!
先簡單的介紹下击敌,什么是 “ 8421碼 ”?
8421碼是一種編碼方式拴事,又為8421BCD編碼,是一種二進(jìn)制轉(zhuǎn)化為十進(jìn)制的編碼方法刃宵。
? ? 是不是想吐槽說,這尼瑪是什么鬼牲证?這也叫介紹么哮针?確實(shí)就是這么簡單坦袍,它只是一種快速從二進(jìn)制轉(zhuǎn)換到十進(jìn)制的方法。
現(xiàn)在向你介紹下捂齐,它所蘊(yùn)含的魅力蛮放。
贅述:我們通過用二進(jìn)制表示十進(jìn)制奠宜,也就是我們的整數(shù)包颁,一般都是用八個(gè)位數(shù)表示,如果前面四個(gè)位數(shù)全是零压真,則可以不寫娩嚼,滿了則在前面補(bǔ)零。
現(xiàn)在榴都,我們用二進(jìn)制分別表示8? ? 4? ? ?2? ? ?1這四個(gè)數(shù)
8? ? --->>? 1000
4? ? --->>? 0100
2? ? --->>? 0010
1? ? --->>? 0001
仔細(xì)看看待锈,你發(fā)現(xiàn)什么規(guī)律了么?
是不是發(fā)現(xiàn)嘴高,他們在每個(gè)不同的位數(shù)上表示了不同的十進(jìn)制的數(shù)竿音?這就8421的由來和屎, 我們把在四個(gè)位數(shù)中的第一位表示8,第二個(gè)位數(shù)表示4春瞬, 第三個(gè)位數(shù)表示2 柴信,第四個(gè)則表示1.? ,如下圖所示宽气。
學(xué)會了這個(gè)基本算法之后随常,你是否想問, 你這個(gè)算法也太垃圾了萄涯, 我要是計(jì)算超出15的數(shù)呢绪氛?那我怎么計(jì)算呢?涝影? 別急枣察!待我慢慢講!燃逻!
精彩的還在后面序目。上面問題說的不錯(cuò),假如超過15這個(gè)數(shù)伯襟,就好比 58猿涨,我該如何用二進(jìn)制表示呢?其實(shí)我在前面就已經(jīng)提示過大家姆怪,如果超過這個(gè)15就要往前面補(bǔ)位叛赚,這會又有人要說了,我往前面補(bǔ)位數(shù)稽揭,那我怎么用到8421這個(gè)算法來計(jì)算呢?
現(xiàn)在我教大家一個(gè)規(guī)律红伦。
每補(bǔ)一次位,我們的補(bǔ)位的個(gè)數(shù)都要乘以16淀衣,你可以把第一個(gè) 四位昙读,堪稱是16^(1-1)
公式:sum =16^(n-1)? ?,這里的n 表示的是補(bǔ)的次數(shù),這里的sum表示補(bǔ)的次數(shù)的每個(gè)數(shù)需要乘以這個(gè)數(shù)膨桥,計(jì)算才正確蛮浑。
舉個(gè)例子:0001 0000? 這個(gè)二進(jìn)制中的1 ,表示的其實(shí)就1*16只嚣,同理沮稚,0010 0000 這里的1表示也就是2*16 。
解釋一下蕴掏,為什么要乘以16.是因?yàn)樗膫€(gè)位數(shù)的二進(jìn)制,其實(shí)就是十六進(jìn)制的一位盛杰,可以把四個(gè)位數(shù)的二進(jìn)制,看成十六進(jìn)制的一位定拟,如果大家對二進(jìn)制轉(zhuǎn)換十六進(jìn)制不太了解的話 ,可以先去了解下青自。
下面內(nèi)容,我就默認(rèn)大家知道為什么要乘以16了Gぁ!需曾!
我們現(xiàn)在來算58,轉(zhuǎn)換到二進(jìn)制為多少呢?
因?yàn)檫@里我們需要補(bǔ)一次商源,所以我們只需要用58除以16车份,得出的商數(shù)牡彻,用來填補(bǔ)【第一個(gè)】四位數(shù),就是0011缎除,那么怎么表示除出來的余數(shù)呢?其實(shí)余數(shù)器罐,沒有滿足16渐行,因此只能往后面補(bǔ)充,58-48=10 祟印,在【第二個(gè)】四位數(shù)中補(bǔ)充這個(gè)余數(shù)肴沫,就是1010,因此得到的結(jié)果是00111010
我們拿電腦內(nèi)置的計(jì)算器來確認(rèn)下蕴忆,計(jì)算結(jié)果:
如果你還有點(diǎn)不明白的話,我現(xiàn)在來舉個(gè)比較實(shí)際的例子講吧!U掘稹汰具!
0001 0001 0001 0001 我們怎么把這個(gè)二進(jìn)制轉(zhuǎn)換成十進(jìn)制呢?首先我們看 總共有四個(gè) 四位數(shù)【這里把一個(gè)四位數(shù)看成一個(gè)整體】郁副,
所以最左邊的四位數(shù),每個(gè)數(shù)位的“1”都要乘以對應(yīng)的16^(4-1)=4096 存谎,就是說肥隆,在最左邊的一個(gè)四位“ 0001 ”的計(jì)算方法是:
8* 16^(4-1) *0+4*16 ^ (4-1)*0+2*16 ^ (4-1)*0+*16 ^ (4-1)*1=4096
第二個(gè)的四位算法是:( 提示:16^(3-1)=256 )
8*?16^(3-1)?*0????+????4*16?^?(3-1)*0????+????2*16?^?(3-1)*0????+????*16?^?(3-1)*1=256
.。恰聘。。
依此類推晴叨,最終結(jié)果是4096+256+16+1=4369
不知道我講到這里兼蕊,你是否感受到了“8421碼算法”的魅力是否吸引到你呢件蚕?
好了,今天8421碼算法的魅力就介紹到這里排作,如果還有好玩有趣的學(xué)習(xí)內(nèi)容,我會慢慢跟大家分享的妄痪,
最后感謝大家閱讀本文,如果有問題僧著,歡迎大家和我討論障簿。CU~!