c語言進制之間的轉換

一、二進制八進制十六進制轉十進制

二進制、八進制和十六進制向十進制轉換遵循“按權相加”的方法。所謂“權”,也即“位權”

假設當前數字是 N 進制,那麼: 
對於整數部分,從右往左看,第 i 位的位權等Ni-1
 對於小數部分,恰好相反,要從左往右看,第 j 位的位權爲N-j
假設二進制數爲100110,那麼它轉換爲十進制的過程爲:
1×25+0×24+0×23+1×22+1×21+0×20=38
八進制,十六進制的操作同樣如此,只不過要把N的值改成8獲16,然後再乘對應哪個位置上的數,求和即爲要求的十進制數。

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

1 整數部分

十進制整數轉換爲 N 進制整數採用“除 N 取餘,逆序排列”法:
① 將 N 作爲除數,用十進制整數除以 N,可以得到一個商和餘數; 
② 保留餘數,用商繼續除以 N,又得到一個新的商和餘數; 
③ 仍然保留餘數,用商繼續除以 N,還會得到一個新的商和餘數;
④ …… 
⑤ 如此反覆進行,每次都保留餘數,用商接着除以 N,直到商爲 0 時爲止。
⑥把先得到的餘數作爲 N 進制數的低位數字,後得到的餘數作爲 N 進制數的高位數字,依次排列起 來,就得到了 N 進制數字
例如:
234轉換爲二進制數的過程
234/2=117……0
117/2=58……1
58/2=29……0
29/2=14……1
14/2=7……0
7/2=3……1
3/2=1……1
1/2=0……1
結果爲11101010
其他進制整數部分也是這樣操作

2 小數部分

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

⑥把取出的整數部分按順序排列起來,先取出的整數作爲 N 進制小數的高位數字,後取出的整數作爲低位數字,這 樣就得到了 N 進制小數
如把0.6875轉換爲二進制
0.68752=1.3750 取1
0.375
2=0.750 取0
0.752=1.50 取1
0.5
2=1.0 取1
結果爲0.1011
如果一個數字既包含了整數部分又包含了小數部分,那麼將整數部分和小數部分開,分別按照上面的方法完成轉換, 然後再合併在一起即可。
例如: 
十進制數字 36926.930908203125 轉換成八進制的結果爲 110076.7345; 
十進制數字 42.6875 轉換成二進制的結果爲 101010.1011

三、 二進制、八進制和十六進制的轉換

1、二進制整數和八進制整數之間的轉換

二進制整數轉換爲八進制整數時,每三位二進制數字轉換爲一位八進制數字,運算的順序是從低位向高位依次進行, 高位不足三位用零補齊

2、二進制整數和十六進制整數之間的轉換

二進制整數轉換爲十六進制整數時,每四位二進制數字轉換爲一位十六進制數字,運算的順序是從低位向高位依次 進行,高位不足四位用零補齊

對應關係可參考在這裏插入圖片描述
二進制、八進制和十六進制的整數轉換一般夠用,若有小數,也可先轉換爲十進制,再轉換爲對應進制

若有不足,請多擔待

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