淺析進制的轉換原理


淺析進制的轉換原理

進制也就是進位制,做加法運算時滿 x 進 1,做減法時借 1 當 x,這就是 x 進制,包含 x 個數字即區間 [0, x-1],基數為 x;十進制有 0~9 共10個數字,基數為10,在加減法運算中,滿10進1,借1當10。

1.任意進制向十進制轉換(理解按權相加的方法)

1)十進制轉換為十進制(轉換為本身?多此一舉?先想一想這個問題,或許有必要。)

x進制包含區間為 [0, x-1] 內的整數,在此暫且將這些整數成為 x 進制的“基本數”;

十進制包含的基本數為:0,1,2,3,4,5,6,7,8,9 共10個數;

例:將十進制數 985.211 轉換為十進制

可以將這個數分解:

985.211 =

900.00 + 80.00 + 5.00 + 0.200 + 0.010 + 0.001 =

9 * 100 + 8 * 10 + 5 * 1 + 2 / 10 + 1 / 100 + 1 / 1000 =>

9 * (10^2) + 8 * (10^1) + 5 * (10^0) + 2 * (10^(-1)) + 1 * (10^(-2)) + 1 * (10^(-3)) =

(看到“位權”了嗎?就是那個“10”的冪!)

900 + 80 + 5 + 0.2 + 0.01 + 0.001 = 985.211

我們看到了十進制轉換到十進制的過程,最重要的是分解到出現“位權”的過程,

我們觀察到原來待轉換的進制的每一位數(這個進制的基本數)作為了轉換時每一項的系數,也就是其后的10的冪次的倍數;

由於x進制滿x進1,並在其后補0,即變成了10,所以x進制的10就對應十進制的數x:十進制的10對應十進制的10,二進制的10對應十進制的2,八進制的10對應十進制的8,十六進制的10對應十進制的16...

x進制的數可以像上面的例子一樣分解成每一位數(該進制的基本數)乘以相應的該進制下的10的冪次,由於x進制的10就對應十進制的數x,所以再將x進制的10替換為x后,再計算結果就是對應的十進制數了。

例:

2)二進制轉換為十進制:

將二進制 (1011011) 轉換為十進制

1011.011 =

1000 + 10 + 1 + 0.01 + 0.001 =

1 * (10^3) + 1 * (10^1) + 1 * (10^0) + 1 * (10^-2) + 1 * (10^-3) =>

(開始轉換為十進制,將二進制的10替換為十進制的2)1 * (2^3) + 1 *(2^1) + 1 * (2^0) + 1 * (2^-2) + 1 * (2^-3) =

8 + 2 + 1 + 0.25 + 0.125 = 11.375(轉換為十進制的結果,轉換完畢)

3)八進制轉換為十進制:

將八進制(137.2) 轉換為十進制

137.2 =

100 + 30 + 7 + 0.2 =

1 * (10^2) + 3 * (10^1) + 7 * (10^0) + 2 * (10^-1) =>

(開始轉換為十進制,將八進制的10替換為十進制的8)1 * (8^2) + 3 * (8^1) + 7 *(8^0) + 2 * (8^-1) =

64 + 24 + 7 + 0.25 = 95.25(轉換為十進制的結果,轉換完畢)

4)十六進制轉換為十進制:

將十六進制 (9FABC) 轉換為十進制

9FABC =

90000 + F000 + A00 + B0 + C =

9 * (10^4) + F * (10^3) + A * (10^2) + B * (10^1) + C * (10^0) =>

(開始轉換為十進制,將十六進制的10替換為十進制的16)9 * (16^4) + 15 * (16^3) + 10 * (16^2) + 11 * (16^1) + 12 * (16^0) =

589824 + 61440 + 2560 + 176 + 12 = 654012

5)將九進制數(2022)轉換為十進制

2022 =

2000 + 20 + 2 =

2 * (10^3) + 2 * (10^1) + 2 * (10^0) =>

(開始轉換為十進制,將九進制的10替換為十進制的9)2 * (9^3) + 2 * (9^1) + 2 * (2^0) =

1458 + 18 + 2 = 1478

其他任意進制轉換為十進制可同上方法,不一一舉例。

至此,通過上述分析,我想我已經簡單淺顯地解釋了任意進制轉換為十進制的具體過程和基本原理,以此回答了為什么要用按權相加的方法,你覺得我寫得對不對呢?

2.十進制向任意進制轉換

整數部分:

我們已經知道了什么是進位制,即知道了進位制的變化規則,我們把十進制和其他進制放在一起觀察一下:

其中"t"代表十進制數

進制種類 . . . . . .
十進制 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
二進制 0 1 10 11 100 101 110 111 1000 1001 1010 1011
對2取模(t%2) 0 1 0 1 0 1 0 1 0 1
進制種類 . . . . . .
十進制 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
八進制 0 1 2 3 4 5 6 7 10 11 12 13 14 15 16 17 20 21 22
對8取模(t%8) 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2
進制種類 . . . . . .
十進制 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
十六進制 0 1 2 3 4 5 6 7 8 9 A B C D E F 10 11 12
對16取模(t%16) 0 1 2 3 4 5 6 7 8 9 A B C D E F 0 1 2

我們可以觀察到

當十進制數還沒有滿x進制時,十進制數就是x進制數,當十進制數滿x進制時,我們需要把十進制中的x取出來作為x進制的10來給x進制進1位,這也就是前面說的x進制的10對應十進制的x,兩者是相互對應的,這是由進位制的規則(滿x進1)得出的。

所以十進制轉換為x進制的操作是:

取出十進制中的x作為x進制的10,加上取出后剩余的未滿x進制的數。如果取出的“x的個數”超過x,再將這個取出的個數(十進制)也轉換為x進制即可。

例:

將十進制整數(11) 轉換為二進制

11中取出2的個數:11 / 2 = 5,

余數:11 % 2 = 1

則:11 => 轉換為二進制:5 個 10(二進制) + 1

5中取出2的個數:5 / 2 = 2,

余數:5 % 2 = 1

則:5 => 轉換為二進制:2 個 10(二進制) + 1

2 => 轉換為二進制:1個10(二進制)

綜上就是在二進制下:(10個10+1)個10+1

所以:11 => 轉換為二進制:(10 * 10 + 1) * 10 + 1 = 1011

其他進制向十進制的轉換方式同上

於是我們可以理解一般的轉換方法:

對十進制的部分取出x進制,余數就是x進制數,把余數從低位到高位排列,最終得到x進制數。

我們可以知道,一個十進制數除以x進制得到的余數,一定是x進制的基本數,即得到的余數一定在[0, x-1]范圍內,

又知道:一個十進制數 = 這個十進制數最多可以取出的x的個數 * x + 這個十進制數取完所有x后剩余的數

即:

(十進制數) = (十進制數 / x) * x + (十進制數 % x)

這里的x也可以代表x進制

十進制轉換成x進制時,把x替換成x進制的10,(十進制 % x) 的部分就是x進制數,(十進制 / x) 的部分還是十進制數,繼續向x進制轉換,直到所有十進制數部分全部轉換為x進制數為止。

小數部分:

十進制的小數部分對應x進制的一個小數,這個x進制的小數一定是x進制的某個數n除以x進制的10得到的(假設十進制只有一位小數)

那么轉換過程就是十進制小數轉換為x進制的 n / 10,又知道x進制的10對應十進制的x,那么十進制小數乘以十進制的x就可以得到那個x進制數 n,n一定小於x,所以n是x進制下的數。

可以通過x進制小數轉換為十進制小數的過程來逆向思考:

二進制小數轉換為十進制小數:0.1 = 1 / 10 => 1 / 2 = 0.5
八進制小數轉換為十進制小數:0.2 = 2 / 10 => 2 / 8 = 0.25

這樣將十進制的小數乘以十進制的x得到的整數部分對應的是x進制小數的第一位數,把每次得到的數的小數部分繼續轉換,依次把得到的x進制數從高位到低位排在小數點的后面即可。

至此,我應該已經簡單淺顯地解釋了任意進制轉換為十進制的具體過程和基本原理,明白原理之后,我們就可以更輕松地理解和運用轉換方法了。

萬變不離其宗,我們通過進位制的規則:x進制滿x進1,簡單地分析並理解了十進制與其他進制間的轉換方法,抓住本質,在日后遇到從未見過的這類問題也可以自行分析解決了。

內容淺顯,多有誤區,歡迎指正!

2022-04-27修改:錯別字和邏輯錯誤


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM