淺析進(jìn)制轉(zhuǎn)換在計(jì)算機(jī)應(yīng)用中的技巧
掃描二維碼
隨時(shí)隨地手機(jī)看文章
1、二進(jìn)制的使用意義
一種新處置器的盛行,離不開響應(yīng)軟件的支撐。開拓新的處置器能夠會(huì)由于落空響應(yīng)軟件的支撐而影響其推行使用和市場(chǎng)前景;另一方面,得不到普遍使用和必然市場(chǎng)份額的處置器也很可貴到豐厚的軟件支撐。這種處置器和支撐軟件之間互相鉗制的關(guān)系,既使得新處置器的設(shè)計(jì)不得不思索兼容老處置器,也障礙了新處置器的推出。在這種狀況下,研討若何把支撐老處置器的軟件移植到新的處置器上,使新的處置器從降生之初就有豐厚的軟件,不只對(duì)軟件重用有嚴(yán)重意義,更可以坦蕩處置器研發(fā)的思緒,促進(jìn)新處置器的立異。
2、二進(jìn)制在核算機(jī)使用中轉(zhuǎn)換經(jīng)常見的辦法
普通有三種辦法可以把老處置器上的代碼移植到新處置器上:
(1)在新處置器上供應(yīng)專門的運(yùn)轉(zhuǎn)形式來執(zhí)行老代碼,如英特爾的安騰(Itanium)處置器專門設(shè)計(jì)了執(zhí)行x86代碼的硬件。
(2)把源順序從新編譯到新的指令集。
(3)運(yùn)用軟件辦法,分析或翻譯使用順序。
第一種辦法,明顯無法應(yīng)用新處置器的一些進(jìn)步前輩特征,落空了開拓新處置器的意義,而且添加了新處置器的硬件復(fù)雜度,甚至還會(huì)影響原有代碼的執(zhí)行效率;第二種辦法可以到達(dá)很好的效率,但并不老是可行,由于有些順序曾經(jīng)沒有源代碼,有些順序依靠于共享代碼庫,而這些共享代碼以目的代碼方式呈現(xiàn),紛歧定能獲得源碼,有些源順序言語沒有編譯到新指令集的編譯器,此外操作系統(tǒng)的差別還能夠使得只要修正源代碼才干從新編譯這些例程(比方與圖形相關(guān)的代碼)。
因而第三種辦法,稱之為二進(jìn)制翻譯(Binary Translation)應(yīng)運(yùn)而生。它是一種直接翻譯可執(zhí)行二進(jìn)制順序的技能,可以把一種處置器上的二進(jìn)制順序翻譯到別的一種處置器上執(zhí)行。它使得分歧處置器之間的二進(jìn)制順序可以很輕易地互相移植,擴(kuò)展了硬件/軟件的合用局限,有助于打破前面提到的處置器和支撐軟件之間相互掣肘影響立異的場(chǎng)面。二進(jìn)制翻譯也是一種編譯技能,它與傳統(tǒng)編譯的差異在于其編譯處置對(duì)象分歧。傳統(tǒng)編譯處置的對(duì)象是某一種高級(jí)言語,經(jīng)由編譯處置生成某種機(jī)械的目的代碼;二進(jìn)制翻譯處置的對(duì)象是某種機(jī)械的二進(jìn)制代碼,該二進(jìn)制代碼是經(jīng)由傳統(tǒng)編譯生成的,經(jīng)由二進(jìn)制翻譯處置后生成另一種機(jī)械的二進(jìn)制代碼。依照傳統(tǒng)編譯順序前端、中端和后端的劃分,我們可以了解為二進(jìn)制翻譯是擁有非凡前端的編譯器。因而,更快且有用的進(jìn)行進(jìn)制轉(zhuǎn)換就成為很主要的工作。
3、進(jìn)制之間的互相轉(zhuǎn)換技巧
3.1 二進(jìn)制轉(zhuǎn)換為十進(jìn)制
(1)二進(jìn)制轉(zhuǎn)換為十進(jìn)制的傳統(tǒng)辦法—“按權(quán)睜開”法
由二進(jìn)制數(shù)轉(zhuǎn)換成十進(jìn)制數(shù)的根本做法是,把二進(jìn)制數(shù)起首寫成加權(quán)系數(shù)睜開式,然后按十進(jìn)制加律例則乞降。這種做法稱為“按權(quán)睜開”法。
二進(jìn)制數(shù)第0位的權(quán)值是2的0次方,第1位的權(quán)值是2的1次方……
例如,設(shè)有一個(gè)二進(jìn)制數(shù):01100100,轉(zhuǎn)換為十進(jìn)制數(shù)為:
下面是豎式:
01100 100 換算成 十進(jìn)制
(01100 100)B=(100)D
注:B透露表現(xiàn)二進(jìn)制,O透露表現(xiàn)八進(jìn)制,D透露表現(xiàn)十進(jìn)制,H透露表現(xiàn)十六進(jìn)制。
(2)二進(jìn)制轉(zhuǎn)換為十進(jìn)制的技巧辦法—“直接相加”算法。
依據(jù)進(jìn)制轉(zhuǎn)化的道理可知,二進(jìn)制轉(zhuǎn)化為十進(jìn)制時(shí),都與2的次方數(shù)有關(guān),即從低位到高位順次為1、2、4、8、16、32、64……,1的位數(shù)有用,0的位數(shù)無效,如許就可以依據(jù)二進(jìn)制對(duì)應(yīng)的位數(shù)直接算加法。
例:將上面的二進(jìn)制數(shù):0110 0100,轉(zhuǎn)換為10進(jìn)制為:
后果直接算加法:64+32+4=100
即(01100 100)B=(100)D
3.2 十進(jìn)制轉(zhuǎn)換為二進(jìn)制
3.2.1 十進(jìn)制轉(zhuǎn)換為二進(jìn)制的傳統(tǒng)辦法—“除2取余”法
十進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù)時(shí),因?yàn)檎麛?shù)和小數(shù)的轉(zhuǎn)換辦法分歧,所以先將十進(jìn)制數(shù)的整數(shù)局部和小數(shù)局部辨別轉(zhuǎn)換后,再加以兼并。十進(jìn)制整數(shù)轉(zhuǎn)換為二進(jìn)制整數(shù)采用“除2取余,逆序陳列”法。詳細(xì)做法是:用2去除十進(jìn)制整數(shù),可以獲得一個(gè)商和余數(shù);再用2去除商,又會(huì)獲得一個(gè)商和余數(shù),如斯進(jìn)行,直到商為零時(shí)為止,然后把先獲得的余數(shù)作為二進(jìn)制數(shù)的低位有用位,后獲得的余數(shù)作為二進(jìn)制數(shù)的高位有用位,順次陳列起來。 十進(jìn)制小數(shù)轉(zhuǎn)換成二進(jìn)制小數(shù)采用“乘2取整,挨次陳列”法。詳細(xì)做法是:用2乘十進(jìn)制小數(shù),可以獲得積,將積的整數(shù)局部掏出,再用2乘余下的小數(shù)局部,又獲得一個(gè)積,再將積的整數(shù)局部掏出,如斯進(jìn)行,直到積中的小數(shù)局部為零,或許到達(dá)所要求的精度為止。然后把掏出的整數(shù)局部按挨次陳列起來,先取的整數(shù)作為二進(jìn)制小數(shù)的高位有用位,后取的整數(shù)作為低位有用位。
例:將十進(jìn)制數(shù)302.25轉(zhuǎn)換為二進(jìn)制數(shù)
(1)整數(shù)局部:
302/2=151余0
151/2=75余1
75/2=37余1
37/2=18余1
18/2=9余0
9/2=4余1
4/2=2余0
2/2=1 余0
1/2=0余1
(302)D=(100101110)B
(2)小數(shù)局部:
0.25
X 2
_______________
0.50 (整數(shù)局部0為高位)
X 2
_______________
1.00 (整數(shù)局部1為低位)
(0.25)D=(0.01)B
故(302.25)D=(100101110.01)B
3.2.2 十進(jìn)制轉(zhuǎn)換為二進(jìn)制的技巧辦法—因式分化法
依據(jù)進(jìn)制轉(zhuǎn)化的道理可知,十進(jìn)制轉(zhuǎn)化為二進(jìn)制時(shí),都與2的次方數(shù)有關(guān),即從低位到高位順次為1、2、4、8、16、32、64……,1的位數(shù)有用,0的位數(shù)無效,如許就可以依據(jù)二進(jìn)制對(duì)應(yīng)的位數(shù)按上面的數(shù)進(jìn)行因式分化。
將十進(jìn)制數(shù)302.25轉(zhuǎn)換為二進(jìn)制數(shù)
(1)整數(shù)局部:
即:(302.25)D=(100101110)B
(2)小數(shù)局部:
整數(shù)的轉(zhuǎn)換是準(zhǔn)確的,小數(shù)的轉(zhuǎn)換能夠呈現(xiàn)無量小數(shù)或輪回小數(shù)的狀況。此時(shí)需求進(jìn)行舍入處置以截?cái)?,所以小?shù)的轉(zhuǎn)換能夠略有偏向。用上例辦法獲得(0.25)D=(0.01)B
故(302.25)D=(100101110.01)B
3.3 八進(jìn)制與二進(jìn)制的轉(zhuǎn)換
因?yàn)?1=23,闡明八進(jìn)制的一位對(duì)應(yīng)二進(jìn)制的三位
(1)將八進(jìn)制轉(zhuǎn)換為二進(jìn)制:
例:將八進(jìn)制的37.416轉(zhuǎn)換成二進(jìn)制數(shù):
(2)將二進(jìn)制轉(zhuǎn)換為八進(jìn)制:
例:將二進(jìn)制的10110.0011轉(zhuǎn)換成八進(jìn)制:
3.4 十六進(jìn)制與二進(jìn)制的轉(zhuǎn)換
因?yàn)?61=24,闡明十六進(jìn)制的一位對(duì)應(yīng)二進(jìn)制的四位
(1)十六進(jìn)制轉(zhuǎn)換為二進(jìn)制
例:將十六進(jìn)制數(shù)5DF.9 轉(zhuǎn)換成二進(jìn)制:
(2)二進(jìn)制轉(zhuǎn)換為十六進(jìn)制
例:將二進(jìn)制數(shù)1100001.111 轉(zhuǎn)換成十六進(jìn)制:
3.5 十進(jìn)制與八進(jìn)制、十六進(jìn)制的轉(zhuǎn)換
將十進(jìn)制轉(zhuǎn)換為八進(jìn)制、十六進(jìn)制首要經(jīng)過二進(jìn)制造為橋梁進(jìn)行轉(zhuǎn)換,辦法同上。
即:十進(jìn)制←→二進(jìn)制←→八進(jìn)制;十進(jìn)制←→二進(jìn)制←→十六進(jìn)制。
總之,進(jìn)制在核算機(jī)信息技能中使用普遍,特殊是二進(jìn)制,已頻頻使用于日常生涯中,特殊是二進(jìn)制與十進(jìn)制之間的轉(zhuǎn)化作為各進(jìn)制之間轉(zhuǎn)化的橋梁。凡間引見的進(jìn)制將的轉(zhuǎn)化,是從理論上處理問題,而實(shí)踐使用中不太適用。就拿測(cè)驗(yàn)來說,測(cè)驗(yàn)時(shí)碰見一個(gè)大的十進(jìn)制整數(shù)數(shù)轉(zhuǎn)換為二進(jìn)制數(shù),采用“除2取余”的辦法不只費(fèi)工夫還輕易犯錯(cuò),假如采用本文所述的因式分化法來做則簡(jiǎn)略、直觀,適用性更強(qiáng),在編程使用中也是如斯。