1樓:一意孤行
將二進位制、八進位制、十六進位制轉換為十進位制
二進位制、八進位制和十六進位制向十進位制轉換都非常容易,就是「按權相加」。所謂「權」,也即「位權」。
假設當前數字是 n 進位制,那麼:
對於整數部分,從右往左看,第 i 位的位權等於ni-1
對於小數部分,恰好相反,要從左往右看,第 j 位的位權為n-j。
更加通俗的理解是,假設一個多位數(由多個數字組成的數)某位上的數字是 1,那麼它所表示的數值大小就是該位的位權。
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。將各個位的數字乘以位權,然後再相加,就得到了十進位制形式。
2) 小數部分
例如,將八進位制數字 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。
更多轉換成十進位制的例子:
二進位制:1001 = 1×23 + 0×22 + 0×21 + 1×20 = 8 + 0 + 0 + 1 = 9(十進位制)
二進位制:101.1001 = 1×22 + 0×21 + 1×20 + 1×2-1 + 0×2-2 + 0×2-3 + 1×2-4 = 4 + 0 + 1 + 0.
5 + 0 + 0 + 0.0625 = 5.5625(十進位制)
八進位制:302 = 3×82 + 0×81 + 2×80 = 192 + 0 + 2 = 194(十進位制)
八進位制:302.46 = 3×82 + 0×81 + 2×80 + 4×8-1 + 6×8-2 = 192 + 0 + 2 + 0.
5 + 0.09375= 194.59375(十進位制)
十六進位制:ea7 = 14×162 + 10×161 + 7×160 = 3751(十進位制)
將十進位制轉換為二進位制、八進位制、十六進位制
將十進位制轉換為其它進位制時比較複雜,整數部分和小數部分的演算法不一樣,下面我們分別講解。
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。
注意,十進位制小數轉換成其他進位制小數時,結果有可能是一個無限位的小數。請看下面的例子:
十進位制 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語言程式設計中,二進位制、八進位制、十六進位制之間幾乎不會涉及小數的轉換,所以這裡我們只講整數的轉換,大家學以致用足以。另外,八進位制和十六進位制之間也極少直接轉換,這裡我們也不再講解了。
總結本節前面兩部分講到的轉換方法是通用的,任何進位制之間的轉換都可以採用,只是有時比較麻煩而已。二進位制和八進位制、十六進位制之間的轉換有非常簡潔的方法,所以沒有采用前面的方法。
2樓:
一位一位取出來,
一位拉成3位:
0 -- 000
1 -- 001
2 -- 010
3 -- 011
4 -- 100
5 -- 101
6 -- 110
7 -- 111
*****===
例如:127
1 拉成 001
2拉成 010
7 拉成 111
連起來:001 010 111
3樓:白石黃海青
把八進位制的每一個數字都換成3位的二進位制數,按順序排起來即可。或者用個笨方法,把八進位制換成十進位制,再把十進位制換成二進位制,各進位制與十進位制的轉換應該知道吧
怎麼講ip地址轉10進位制換成2進位制
二進位制是計算技術中廣泛採用的一種數制。二進位制資料是用0和1兩個數碼來表示的數。它的基數為2,進位規則是 逢二進一 借位規則是 借一當二 二進位制加法 有四種情況 0 0 0 0 1 1 1 0 1 1 1 10 進位為1 ip地址其實是32位二進位制數為了使用方便才把他寫成十進位制分為4段,每段...
三進位制如何轉為十進位制,10進位制轉8進位制方法
整數部分,一般使用長除法,用基數除待轉換數或上一步的商,求得餘數或補數,直至最後的商為零。將各次餘數從後往前排列,即為目標進位制下的整數部分。小數部分,一般使用長乘法,用基數乘待轉換數或上一步的積,求得整數部分,將正數部分從前往後排列,即為目標進位制下的小數部分正負數需要分別處理。比如32 12轉三...
將10進位制100 345轉換為8進位制怎麼算
整數部分,除8取餘法,每次將整數部分除以8,餘數為該位權上的數,商繼續除以8,餘數又為上一個位權上的數,然後以此類推一直下去,直到商為零,最後從最後一個餘數向前排列就可以了。再看小數部分,用乘八取整法,也就是說小數部分乘以8,然後取整數部分,再讓剩下的小數部分再乘以8,再取整數部分,以此類推,一直乘...