閱讀:0       作者:嚴長生

進制轉換:二進制、八進制、十六進制、十進制之間的轉換

上一節我們已經講解了四個常見的數字系統,本節我們將講解如何把一個數字系統轉換成另一個數字系統。

十進制轉換成其它進制

整數部分和小數部分的轉換算法不同,如果一個十進制數包含了整數部分和小數部分,那么整數部分和小數部分要分開進行轉換。按照以下算法,可以將一個十進制數轉換成 r 進制數(基數為 r 的數字系統)。

整數部分的轉換

  1. 用十進制數的整數部分除以基數 r,得到商和余數,記下余數(第一個余數);
  2. 用得到的商繼續除以基數 r,再次得到商和余數,記下余數;
  3. 重復步驟 2,不斷用上次得到的商除以基數 r,直到商為零,記下余數(最后一個余數)。

將記下的所有余數按照從后往前的順序排列起來,就得到了 r 進制數的整數部分。注意,這是一個逆序排列,最后一個余數在最左邊,表示 r 進制整數的最高位,第一個余數在最右邊,表示 r 進制整數的最低位。

小數部分的轉換

  1. 用十進制數的小數部分乘以基數 r,得到一個積,取出積的整數部分(第一個整數);
  2. 用剩下的小數部分繼續乘以基數 r,又得到一個積,取出積的整數部分;
  3. 重復步驟 2,不斷用上次得到的積的小數部分乘以基數 r,直到積的小數部分為零,取出積的整數部分(最后一個整數)。

將取出的所有積的整數部分按照從前往后的順序排列起來,就得到了 r 進制數的小數部分。注意,這是一個正序排列,第一個整數部分在最左邊,表示 r 進制小數的最高位,最后一個整數部分在最右邊,表示 r 進制小數的最低位。

將上面得到的 r 進制的整數部分和小數部分合并在一起,就得到了整個 r 進制數。

總結:整數部分的轉換就是不斷作除法運算,把得到的所有余數逆序排列起來;小數部分的轉換就是不斷作乘法運算,把得到的所有積的整數部分正序排列起來。

十進制數轉換成二進制數

十進制數轉換成二進制數的過程可以分成以下兩步:
  • 整數部分不斷除以基數 2,直到商為零,把得到的余數逆序排列起來;
  • 小數部分不斷乘以基數 2,直到積的小數部分為零,把得到的積的整數部分正序排列起來。

例子

以 58.125 為例,它的整數部分是 58,小數部分是 0.125。

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(最高位)
⇒ (58)10 = (111010)2

2) 小數部分的轉換
乘法 整數部分
0.125 x 2 0.25 0(最高位)
0.25 x 2 0.5 0
0.5 × 2 1.0 1(最低位)
⇒ (.125)10 = (.001)2

將整數部分和小數部分合并起來,得到二進制數字 111010.001,也即:

(58.125)10 = (111010.001)2

十進制轉換成八進制

十進制數轉換成八進制數的過程可以分成以下兩步:
  • 整數部分不斷除以基數 8,直到商為零,把得到的余數逆序排列起來;
  • 小數部分不斷乘以基數 8,直到積的小數部分為零,把得到的積的整數部分正序排列起來。

例子

以 1508.3125 為例,它的整數部分是 1508,小數部分是 0.3125。

1) 整數部分的轉換:
除法 余數
1508/8 188 4 (最低位)
188/8 23 4
23/8 2 7
2/8 0 2(最高位)
⇒ (1508)10 = (2744)8

2) 小數部分的轉換
乘法 整數部分
0.3125 x 8 2.5 2(最高位)
0.5 x 8 4.0 4(最低位)
⇒ (.3125)10 = (.24)8

將整數部分和小數部分合并起來,得到八進制數字 2744.24,也即:

(1508.3125)10 = (2744.24)8

十進制轉換成十六進制

十進制數轉換成十六進制數的過程可以分成以下兩步:
  • 整數部分不斷除以基數 16,直到商為零,把得到的余數逆序排列起來;
  • 小數部分不斷乘以基數 16,直到積的小數部分為零,把得到的積的整數部分正序排列起來。

例子

以 691780.548828125 為例,它的整數部分是 691780,小數部分是 0.548828125。

1) 整數部分的轉換:
除法 余數
691780/16 43236 4 (最低位)
43236/16 2702 4
2702/16 168 E
168/16 10 8
10/16 0 A(最高位)
⇒ (691780)10 = (A8E44)8

2) 小數部分的轉換
乘法 整數部分
0.548828125 x 16 8.78125 8(最高位)
0.78125 x 16 12.5 C
0.5 x 16 8.0 8(最低位)
⇒ (.548828125)10 = (.8C8)16

將整數部分和小數部分合并起來,得到八進制數字 A8E44.8C8,也即:

(691780.548828125)10 = (A8E44.8C8)16

其它進制轉換成十進制

任何一種進制轉換成十進制的算法都是一樣的,就是“按權相加”。將 r 進制轉換成十進制可以分以下兩步進行:
  • 將每一位的數碼乘以該位的權重;
  • 把得到的所有積相加。

將二進制轉換成十進制

以二進制數字 1101.101 為例,它在數學上可以寫作:

(1101.101)2 = (1 × 23) + (1 × 22) + (0 × 21) + (1 × 20) + (1 × 2-1) + (0 × 2-2) +  (1 × 2-3)
⇒ (1101.11)2 = 8 + 4 + 0 + 1 + 0.5 + 0 + 0.125 = 13.625
⇒ (1101.11)2 = (13.625)10

所以,二進制 1101.101 轉換成十進制的結果是 13.625。

將八進制轉換成十進制

以八進制數字 145.23 為例,它在數學上可以寫作:

(145.23)8 = (1 × 82) + (4 × 81) + (5 × 80) + (2 × 8-1) + (3 × 8-2)
⇒ (145.23)8 = 64 + 32 + 5 + 0.25 + 0.05 = 101.3
⇒ (145.23)8 = (101.3)10

所以,八進制 145.23 轉換成十進制的結果是 101.3。

將十六進制轉換成十進制

以十六進制數字 1A5.2C 為例,它在數學上可以寫作:

(1A5.2C)16 = (1 × 162) + (10 × 161) + (5 × 160) + (2 × 16-1) + (12 × 16-2)
⇒ (1A5.2C)16 = 256 + 160 + 5 + 0.125 + 0.046875 = 421.171875
⇒ (1A5.2C)16 = (421.171875)10

所以,十六進制 1A5.2C 轉換成十進制的結果為 421.171875。

二進制、八進制、十六進制之間的轉換

這幾種數字系統的基數存在次方的關系,轉換起來非常簡單。

二進制轉換成八進制

二進制數的基數是 2,八進制數的基數是 8,因為23 = 8,所以每三位二進制數可以轉換成一位八進制數。

將二進制數轉換成八進制數的步驟為:
  • 對二進制數進行劃分,每三位為一組,整數部分從右往左進行劃分,小數部分從左往右進行劃分。
  • 不足三位時,整數部分高位用 0 補齊,小數部分低位用 0 補齊。
  • 按照從左往右的順序,依次寫出每組二進制數對應的八進制數。

每組二進制數都有八種不同的組合,分別對應不同的八進制數字,如下所示:
000 = 0    001 = 1    010 = 2    011 = 3
100 = 4    101 = 5    110 = 6    111 = 7

例子

把二進制數 101110.01101 轉換成八進制數:

(101110.01101)2 = (101) (110) . (011) (01)2
⇒ (101110.01101)2 = (101) (110) . (011) (010)2
⇒ (101110.01101)2 = (56.32)8

所以,二進制數 101110.01101 轉換成八進制的結果為 56.32。

二進制轉換成十六進制

這個過程和「二進制轉換成八進制」的過程類似。二進制數的基數是 2,十六進制數的基數是 16,因為24 = 16,所以每四位二進制數可以轉換成一位十六進制數。

將二進制數轉換成十六進制數的步驟為:
  • 對二進制數進行劃分,每四位為一組,整數部分從右往左進行劃分,小數部分從左往右進行劃分。
  • 不足四位時,整數部分高位用 0 補齊,小數部分低位用 0 補齊。
  • 按照從左往右的順序,依次寫出每組二進制數對應的十六進制數。

每組二進制數都有十六種不同的組合,分別對應不同的十六進制數字,如下所示:
0000 = 0    0001 = 1    0010 = 2    0011 = 3
0100 = 4    0101 = 5    0110 = 6    0111 = 7
1000 = 8    1001 = 9    1010 = A    1011 = B
1100 = C    1101 = D    1110 = E    1111 = F

例子

把二進制數 101110.01101 轉換成十六進制數:

(101110.01101)2 = (10) (1110) . (0110) (1)2
⇒ (101110.01101)2 = (0010) (1110) . (0110) (1000)2
⇒ (101110.01101)2 = (2D.68)16

所以,二進制數 101110.01101 轉換成十六進制的結果為 2D.68。

八進制轉換成二進制

這是一個和「二進制轉換成八進制」相反的過程,具體步驟為:
  • 將八進制數字的每一位分別轉換成一組三位的二進制數字。
  • 按照從左往右的順序,依次寫出每組二進制數字。
  • 整數部分最高位的 0 和小數部分最低位的 0 是多余的,直接去掉。

例子

把八進制數 145.23 轉換成二進制數:

(145.23)8 = (001) (100) (101) . (010) (011)2
⇒(145.23)8 = (1100101.010011)2

所以,八進制數字 145.23 轉換成二進制的結果為 1100101.010011。

十六進制轉換成二進制

這是一個和「二進制轉換成十六進制」相反的過程,具體步驟為:
  • 將十六進制數字的每一位分別轉換成一組四位的二進制數字。
  • 按照從左往右的順序,依次寫出每組二進制數字。
  • 整數部分最高位的 0 和小數部分最低位的 0 是多余的,直接去掉。

例子

把十六進制數 65.4C 轉換成二進制數:

(65.4C)16 = (0110) (0101) . (0100) (1100)2
⇒(65.4C)16 = (1100101.010011)2

所以,十六進制數 65.4C 轉換成二進制的結果為 1100101.010011。

八進制轉換成十六進制

先將八進制數轉換成二進制數,再將二進制數轉換成十六進制數。

例子

把八進制數 145.23 轉換成十六進制數。

1) 先轉換成二進制數:

(145.23)8 = (001) (100) (101) . (010) (011)2
⇒ (145.23)8 = (1100101.010011)2

2) 把得到的二進制數轉換成十六進制數:

(1100101.010011)2 = (110) (0101) . (0100) (11)2
 ⇒ (1100101.010011)2 = (0110) (0101) . (0100) (1100)2
 ⇒ (1100101.010011)2 = (65.4C)16

所以,八進制數 145.23 轉換成十六進制的結果為 65.4C。 

十六進制轉換成八進制

先將十六進制數轉換成二進制數,再將二進制數轉換成八進制數。

例子

把十六進制數 65.4C 轉換成八進制數。

1) 先轉換成二進制數:

(65.4C)16 = (0110) (0101) . (0100) (1100)2
⇒ (65.4C)16 = (1100101.010011)2

2) 把得到的二進制數轉換成八進制數:

(1100101.010011)2 = (1) (100) (101) . (010) (011)2
⇒ (1100101.010011)2 = (001) (100) (101) . (010) (011)2
⇒ (1100101.010011)2  = (145.23)8

所以,十六進制數 65.4C 轉換成八進制的結果為 145.23。
黑龙江22选5开奖结果查询