二進位制、八進位制和十六進製制向十進位制轉換都非常容易,就是「按權相加」。所謂「權」,也即「位權」。
假設當前數字是 n 進製,那麼:
更加通俗的理解是,假設乙個多位數(由多個數字組成的數)某位上的數字是 1,那麼它所表示的數值大小就是該位的位權。
例如,將八進位制數字 53627 轉換成十進位制:
53627 = 5×84 + 3×83 + 6×82 + 2×81 + 7×80 = 22423(十進位制)
從右往左看,第1位的位權為 80=1,第2位的位權為 81=8,第3位的位權為 82=64,第4位的位權為 83=512,第5位的位權為 84=4096 …… 第n位的位權就為 8n-1。將各個位的數字乘以位權,然後再相加,就得到了十進位制形式。
注意,這裡我們需要以十進位制形式來表示位權。再如,將十六進製制數字 9fa8c 轉換成十進位制:
9fa8c = 9×164 + 15×163 + 10×162 + 8×161 + 12×160 = 653964(十進位制)
從右往左看,第1位的位權為 160=1,第2位的位權為 161=16,第3位的位權為 162=256,第4位的位權為 163=4096,第5位的位權為 164=65536 …… 第n位的位權就為 16n-1。將各個位的數字乘以位權,然後再相加,就得到了十進位制形式。
將二進位制數字轉換成十進位制也是類似的道理:
11010 = 1×24 + 1×23 + 0×22 + 1×21 + 0×20 = 26(十進位制)
從右往左看,第1位的位權為 20=1,第2位的位權為 21=2,第3位的位權為 22=4,第4位的位權為 23=8,第5位的位權為 24=16 …… 第n位的位權就為 2n-1。將各個位的數字乘以位權,然後再相加,就得到了十進位制形式。
例如,將八進位制數字 423.5176 轉換成十進位制:
423.5176 = 4×82 + 2×81 + 3×80 + 5×8-1 + 1×8-2 + 7×8-3 + 6×8-4 = 275.65576171875(十進位制)
小數部分和整數部分相反,要從左往右看,第1位的位權為 8-1=1/8,第2位的位權為 8-2=1/64,第3位的位權為 8-3=1/512,第4位的位權為 8-4=1/4096 …… 第m位的位權就為 8-m。
再如,將二進位制數字 1010.1101 轉換成十進位制:
1010.1101 = 1×23 + 0×22 + 1×21 + 0×20 + 1×2-1 + 1×2-2 + 0×2-3 + 1×2-4 = 10.8125(十進位制)
小數部分和整數部分相反,要從左往右看,第1位的位權為 2-1=1/2,第2位的位權為 2-2=1/4,第3位的位權為 2-3=1/8,第4位的位權為 2-4=1/16 …… 第m位的位權就為 2-m。
更多轉換成十進位制的例子:
將十進位制轉換為其它進製時比較複雜,整數部分和小數部分的演算法不一樣,下面我們分別講解。十進位制整數轉換為 n 進製整數採用「除 n 取餘,逆序排列」法。具體做法是:
把先得到的餘數作為 n 進製數的低位數字,後得到的餘數作為 n 進製數的高位數字,依次排列起來,就得到了 n 進製數字。下圖演示了將十進位制數字 36926 轉換成八進位制的過程:
從圖中得知,十進位制數字 36926 轉換成八進位制的結果為 110076。
下圖演示了將十進位制數字 42 轉換成二進位制的過程:
從圖中得知,十進位制數字 42 轉換成二進位制的結果為 101010。
十進位制小數轉換成 n 進製小數採用「乘 n 取整,順序排列」法。具體做法是:
把取出的整數部分按順序排列起來,先取出的整數作為 n 進製小數的高位數字,後取出的整數作為低位數字,這樣就得到了 n 進製小數。下圖演示了將十進位制小數 0.930908203125 轉換成八進位制小數的過程:
從圖中得知,十進位制小數 0.930908203125 轉換成八進位制小數的結果為 0.7345。
下圖演示了將十進位制小數 0.6875 轉換成二進位制小數的過程:
從圖中得知,十進位制小數 0.6875 轉換成二進位制小數的結果為 0.1011。
如果乙個數字既包含了整數部分又包含了小數部分,那麼將整數部分和小數部分開,分別按照上面的方法完成轉換,然後再合併在一起即可。例如:
下表列出了前 17 個十進位制整數與二進位制、八進位制、十六進製制的對應關係:注意,十進位制小數轉換成其他進製小數時,結果有可能是乙個無限位的小數。請看下面的例子: 其實,任何進製之間的轉換都可以使用上面講到的方法,只不過有時比較麻煩,所以一般針對不同的進製採取不同的方法。將二進位制轉換為八進位制和十六進製制時就有非常簡潔的方法,反之亦然。十進位制01
2345
6789
1011
1213
1415
16二進位制01
1011
100101
110111
1000
1001
1010
1011
1100
1101
1110
1111
10000
八進位制012
3456
7101112
1314
1516
1720
十六進製制01
2345
6789
abcd
ef10
二進位制整數轉換為八進位制整數時,每三位二進位制數字轉換為一位八進位制數字,運算的順序是從低位向高位依次進行,高位不足三位用零補齊。下圖演示了如何將二進位制整數 1110111100 轉換為八進位制:
從圖中可以看出,二進位制整數 1110111100 轉換為八進位制的結果為 1674。
八進位制整數轉換為二進位制整數時,思路是相反的,每一位八進位制數字轉換為三位二進位制數字,運算的順序也是從低位向高位依次進行。下圖演示了如何將八進位制整數 2743 轉換為二進位制:
從圖中可以看出,八進位制整數 2743 轉換為二進位制的結果為 10111100011。
二進位制整數轉換為十六進製制整數時,每四位二進位制數字轉換為一位十六進製制數字,運算的順序是從低位向高位依次進行,高位不足四位用零補齊。下圖演示了如何將二進位制整數 10 1101 0101 1100 轉換為十六進製制:
從圖中可以看出,二進位制整數 10 1101 0101 1100 轉換為十六進製制的結果為 2d5c。
十六進製制整數轉換為二進位制整數時,思路是相反的,每一位十六進製制數字轉換為四位二進位制數字,運算的順序也是從低位向高位依次進行。下圖演示了如何將十六進製制整數 a5d6 轉換為二進位制:
從圖中可以看出,十六進製制整數 a5d6 轉換為二進位制的結果為 1010 0101 1101 0110。
由於在c語言程式設計中,二進位制、八進位制、十六進製制之間幾乎不會涉及小數的轉換,所以這裡我們只講整數的轉換,大家學以致用足以。另外,八進位制和十六進製制之間也極少直接轉換,這裡我們也不再講解了。
本節前面兩部分講到的轉換方法是通用的,任何進製之間的轉換都可以採用,只是有時比較麻煩而已。二進位制和八進位制、十六進製制之間的轉換有非常簡潔的方法,所以沒有採用前面的方法。
十進位制,二進位制,八進位制
發現很多人不懂十進位制 二進位制 八進位制等相互轉化的原理。在此我簡單的寫一下 php中有decbin 用於十進位制轉化二進位制,原理是什麼?我舉例說明一下 33的二進位制是多少?首先你必須明白。二進位制是只出現0101這樣的,33的二進位制是什麼呢?33除以2等於16餘數1,得到的1即為33二進位...
二進位制 八進位制 八進位制 十進位制 十六進製制的介紹
數字在計算機中表現的方式常見的有四種 十進位制 二進位制 八進位制 十六進製制 1.十進位制 1 基數 0,1,2,3,4,5,6,7,8,9 2 進製 逢10進1 3 位權 10的n次方 n從低位到高位從0開始一次增加 1231 110 3 210 2 310 1 110 0 4 程式中的表示方式...
進製轉換(二進位制 八進位制 十進位制 十六進製制)
1 二進位制數 八進位制數 十六進製制數轉十進位制數 有乙個公式 二進位制數 八進位制數 十六進製制數的各位數字分別乖以各自的基數的 n 1 次方,其和相加之和便是相應的十進位制數。個位,n 1 十位,n 2.舉例 110b 1 2的2次方 1 2的1次方 0 2的0次方 0 4 2 0 6d 11...