將十進制轉換爲二進制、八進制、十六進制

將十進制轉換爲其它進制時比較複雜,整數部分和小數部分的算法不一樣,下面我們分別講解。

  1. 整數部分
    十進制整數轉換爲 N 進制整數採用“除 N 取餘,逆序排列”法。具體做法是:
    將 N 作爲除數,用十進制整數除以 N,可以得到一個商和餘數;
    保留餘數,用商繼續除以 N,又得到一個新的商和餘數;
    仍然保留餘數,用商繼續除以 N,還會得到一個新的商和餘數;
    ……
    如此反覆進行,每次都保留餘數,用商接着除以 N,直到商爲 0 時爲止。

把先得到的餘數作爲 N 進制數的低位數字,後得到的餘數作爲 N 進制數的高位數字,依次排列起來,就得到了 N 進制數字。

下圖演示了將十進制數字 36926 轉換成八進制的過程:

從圖中得知,十進制數字 36926 轉換成八進制的結果爲 110076。

下圖演示了將十進制數字 42 轉換成二進制的過程:

從圖中得知,十進制數字 42 轉換成二進制的結果爲 101010。
2) 小數部分
十進制小數轉換成 N 進制小數採用“乘 N 取整,順序排列”法。具體做法是:
用 N 乘以十進制小數,可以得到一個積,這個積包含了整數部分和小數部分;
將積的整數部分取出,再用 N 乘以餘下的小數部分,又得到一個新的積;
再將積的整數部分取出,繼續用 N 乘以餘下的小數部分;
……
如此反覆進行,每次都取出整數部分,用 N 接着乘以小數部分,直到積中的小數部分爲 0,或者達到所要求的精度爲止。

把取出的整數部分按順序排列起來,先取出的整數作爲 N 進制小數的高位數字,後取出的整數作爲低位數字,這樣就得到了 N 進制小數。

下圖演示了將十進制小數 0.930908203125 轉換成八進制小數的過程:

從圖中得知,十進制小數 0.930908203125 轉換成八進制小數的結果爲 0.7345。

下圖演示了將十進制小數 0.6875 轉換成二進制小數的過程:

從圖中得知,十進制小數 0.6875 轉換成二進制小數的結果爲 0.1011。

如果一個數字既包含了整數部分又包含了小數部分,那麼將整數部分和小數部分開,分別按照上面的方法完成轉換,然後再合併在一起即可。例如:
十進制數字 36926.930908203125 轉換成八進制的結果爲 110076.7345;
十進制數字 42.6875 轉換成二進制的結果爲 101010.1011。

下表列出了前 17 個十進制整數與二進制、八進制、十六進制的對應關係:
十進制 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
二進制 0 1 10 11 100 101 110 111 1000 1001 1010 1011 1100 1101 1110 1111 10000
八進制 0 1 2 3 4 5 6 7 10 11 12 13 14 15 16 17 20
十六進制 0 1 2 3 4 5 6 7 8 9 A B C D E F 10
注意,十進制小數轉換成其他進制小數時,結果有可能是一個無限位的小數。請看下面的例子:
十進制 0.51 對應的二進制爲 0.100000101000111101011100001010001111010111…,是一個循環小數;
十進制 0.72 對應的二進制爲 0.1011100001010001111010111000010100011110…,是一個循環小數;
十進制 0.625 對應的二進制爲 0.101,是一個有限小數。
二進制和八進制、十六進制的轉換
其實,任何進制之間的轉換都可以使用上面講到的方法,只不過有時比較麻煩,所以一般針對不同的進制採取不同的方法。將二進制轉換爲八進制和十六進制時就有非常簡潔的方法,反之亦然。

  1. 二進制整數和八進制整數之間的轉換
    二進制整數轉換爲八進制整數時,每三位二進制數字轉換爲一位八進制數字,運算的順序是從低位向高位依次進行,高位不足三位用零補齊。下圖演示瞭如何將二進制整數 1110111100 轉換爲八進制:

從圖中可以看出,二進制整數 1110111100 轉換爲八進制的結果爲 1674。

八進制整數轉換爲二進制整數時,思路是相反的,每一位八進制數字轉換爲三位二進制數字,運算的順序也是從低位向高位依次進行。下圖演示瞭如何將八進制整數 2743 轉換爲二進制:

從圖中可以看出,八進制整數 2743 轉換爲二進制的結果爲 10111100011。
2) 二進制整數和十六進制整數之間的轉換
二進制整數轉換爲十六進制整數時,每四位二進制數字轉換爲一位十六進制數字,運算的順序是從低位向高位依次進行,高位不足四位用零補齊。下圖演示瞭如何將二進制整數 10 1101 0101 1100 轉換爲十六進制:

從圖中可以看出,二進制整數 10 1101 0101 1100 轉換爲十六進制的結果爲 2D5C。

十六進制整數轉換爲二進制整數時,思路是相反的,每一位十六進制數字轉換爲四位二進制數字,運算的順序也是從低位向高位依次進行。下圖演示瞭如何將十六進制整數 A5D6 轉換爲二進制:

從圖中可以看出,十六進制整數 A5D6 轉換爲二進制的結果爲 1010 0101 1101 0110。

在C語言編程中,二進制、八進制、十六進制之間幾乎不會涉及小數的轉換

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章