淺析進位制轉換在計算機應用中的技巧

才智咖 人氣:7.91K
淺析進位制轉換在計算機應用中的技巧
  1、二進位制的使用意義
  一種新處置器的盛行,離不開響應軟體的支撐。開拓新的處置器能夠會由於落空響應軟體的支撐而影響其推行使用和市場前景;另一方面,得不到普遍使用和必然市場份額的處置器也很可貴到豐厚的軟體支撐。這種處置器和支撐軟體之間互相鉗制的關係,既使得新處置器的設計不得不思索相容老處置器,也障礙了新處置器的推出。在這種狀況下,研討若何把支撐老處置器的軟體移植到新的處置器上,使新的處置器從降生之初就有豐厚的軟體,不只對軟體重用有嚴重意義,更可以坦蕩處置器研發的思緒,促進新處置器的立異。
  2、二進位制在核算機使用中轉換經常見的辦法
  普通有三種辦法可以把老處置器上的程式碼移植到新處置器上:
  (1)在新處置器上供應專門的運轉形式來執行老程式碼,如英特爾的安騰(Itanium)處置器專門設計了執行x86程式碼的硬體。
  (2)把源順序從新編譯到新的指令集。
  (3)運用軟體辦法,分析或翻譯使用順序。
  第一種辦法,明顯無法應用新處置器的一些進步前輩特徵,落空了開拓新處置器的意義,而且添加了新處置器的硬體複雜度,甚至還會影響原有程式碼的執行效率;第二種辦法可以到達很好的效率,但並不老是可行,由於有些順序曾經沒有原始碼,有些順序依靠於共享程式碼庫,而這些共享程式碼以目的程式碼方式呈現,紛歧定能獲得原始碼,有些源順序言語沒有編譯到新指令集的編譯器,此外作業系統的差別還能夠使得只要修正原始碼才幹從新編譯這些例程(比方與圖形相關的程式碼)。
  因而第三種辦法,稱之為二進位制翻譯(Binary Translation)應運而生。它是一種直接翻譯可執行二進位制順序的技能,可以把一種處置器上的二進位制順序翻譯到別的一種處置器上執行。它使得分歧處置器之間的二進位制順序可以很輕易地互相移植,擴充套件了硬體/軟體的合用侷限,有助於打破前面提到的處置器和支撐軟體之間相互掣肘影響立異的場面。二進位制翻譯也是一種編譯技能,它與傳統編譯的差異在於其編譯處置物件分歧。傳統編譯處置的物件是某一種高階言語,經由編譯處置生成某種機械的目的程式碼;二進位制翻譯處置的物件是某種機械的二進位制程式碼,該二進位制程式碼是經由傳統編譯生成的,經由二進位制翻譯處置後生成另一種機械的二進位制程式碼。依照傳統編譯順序前端、中端和後端的劃分,我們可以瞭解為二進位制翻譯是擁有非凡前端的編譯器。因而,更快且有用的`進行進位制轉換就成為很主要的工作。
  3、進位制之間的互相轉換技巧
  3.1 二進位制轉換為十進位制
  (1)二進位制轉換為十進位制的傳統辦法—“按權睜開”法
  由二進位制數轉換成十進位制數的根本做法是,把二進位制數起首寫成加權係數睜開式,然後按十進位制加律例則乞降。這種做法稱為“按權睜開”法。
  二進位制數第0位的權值是2的0次方,第1位的權值是2的1次方……
  例如,設有一個二進位制數:01100100,轉換為十進位制數為:
  下面是豎式:
  01100 100 換算成 十進位制
  (01100 100)B=(100)D
  注:B透露表現二進位制,O透露表現八進位制,D透露表現十進位制,H透露表現十六進位制。
  (2)二進位制轉換為十進位制的技巧辦法—“直接相加”演算法。
  依據進位制轉化的道理可知,二進位制轉化為十進位制時,都與2的次方數有關,即從低位到高位順次為1、2、4、8、16、32、64……,1的位數有用,0的位數無效,如許就可以依據二進位制對應的位數直接算加法。
  例:將上面的二進位制數:0110 0100,轉換為10進製為:
  後果直接算加法:64+32+4=100
  即(01100 100)B=(100)D
  3.2 十進位制轉換為二進位制
  3.2.1 十進位制轉換為二進位制的傳統辦法—“除2取餘”法
  十進位制數轉換為二進位制數時,因為整數和小數的轉換辦法分歧,所以先將十進位制數的整數區域性和小數區域性辨別轉換後,再加以兼併。十進位制整數轉換為二進位制整數採用“除2取餘,逆序陳列”法。詳細做法是:用2去除十進位制整數,可以獲得一個商和餘數;再用2去除商,又會獲得一個商和餘數,如斯進行,直到商為零時為止,然後把先獲得的餘數作為二進位制數的低位有用位,後獲得的餘數作為二進位制數的高位有用位,順次陳列起來。 十進位制小數轉換成二進位制小數採用“乘2取整,挨次陳列”法。詳細做法是:用2乘十進位制小數,可以獲得積,將積的整數區域性掏出,再用2乘餘下的小數區域性,又獲得一個積,再將積的整數區域性掏出,如斯進行,直到積中的小數區域性為零,或許到達所要求的精度為止。然後把掏出的整數區域性按挨次陳列起來,先取的整數作為二進位制小數的高位有用位,後取的整數作為低位有用位。
  例:將十進位制數302.25轉換為二進位制數
  (1)整數區域性:
  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)小數區域性:
  0.25
  X 2
  _______________
  0.50 (整數區域性0為高位)
  X 2
  _______________
  1.00 (整數區域性1為低位)
  (0.25)D=(0.01)B
  故(302.25)D=(100101110.01)B
  3.2.2 十進位制轉換為二進位制的技巧辦法—因式分化法
  依據進位制轉化的道理可知,十進位制轉化為二進位制時,都與2的次方數有關,即從低位到高位順次為1、2、4、8、16、32、64……,1的位數有用,0的位數無效,如許就可以依據二進位制對應的位數按上面的數進行因式分化。
  將十進位制數302.25轉換為二進位制數
  (1)整數區域性:
  即:(302.25)D=(100101110)B
  (2)小數區域性:
  整數的轉換是準確的,小數的轉換能夠呈現無量小數或輪迴小數的狀況。此時需求進行舍入處置以截斷,所以小數的轉換能夠略有偏向。用上例辦法獲得(0.25)D=(0.01)B
  故(302.25)D=(100101110.01)B
  3.3 八進位制與二進位制的轉換
  因為81=23,闡明八進位制的一位對應二進位制的三位
  (1)將八進位制轉換為二進位制:
  例:將八進位制的37.416轉換成二進位制數:
  (2)將二進位制轉換為八進位制:
  例:將二進位制的10110.0011轉換成八進位制:
  3.4 十六進位制與二進位制的轉換
  因為161=24,闡明十六進位制的一位對應二進位制的四位
  (1)十六進位制轉換為二進位制
  例:將十六進位制數5DF.9 轉換成二進位制:
  (2)二進位制轉換為十六進位制
  例:將二進位制數1100001.111 轉換成十六進位制:
  3.5 十進位制與八進位制、十六進位制的轉換
  將十進位制轉換為八進位制、十六進位制首要經過二進位制造為橋樑進行轉換,辦法同上。
  即:十進位制←→二進位制←→八進位制;十進位制←→二進位制←→十六進位制。
  總之,進位制在核算機資訊技能中使用普遍,特殊是二進位制,已頻頻使用於日常生涯中,特殊是二進位制與十進位制之間的轉化作為各進位制之間轉化的橋樑。凡間引見的進位制將的轉化,是從理論上處理問題,而實踐使用中不太適用。就拿測驗來說,測驗時碰見一個大的十進位制整數數轉換為二進位制數,採用“除2取餘”的辦法不只費工夫還輕易犯錯,假如採用本文所述的因式分化法來做則簡略、直觀,適用性更強,在程式設計使用中也是如斯。