計算機基礎: 數制與進制轉換


計算機中常用的數制

概念

  • 使用數字量表示物理量時, 僅用一位編碼一般不夠用, 因此經常會使用多位數碼進位計數制

    \[0 \backsim 9 \rightarrow 10 \backsim 99 \rightarrow 100 \backsim 999 \rightarrow \cdots \cdots \]

  • 多位數碼中每一位的構成方法以及從低位到高位的進位規則稱為數制

  • 數字電路中常用技術數制

    • 十進制: 0 ~ 9
    • 二進制:0, 1
    • 八進制: 0 ~ 7
    • 十六進制 : 0 ~ 9A, B, C, D, E, F
  • 任何一種進位計數制中,任何一個數都由整數和小數兩部分組成。

  • 兩種書寫形式: 位置計數法, 多項式表示法

計算機常用二進制位

  • 計算機中常用到的二進制位數有8位、16位、32位,可以分別用2位、4位、8位十六進制數表示;
  • 其他任意進制的分析方法和二進制、十進制、十六進制相同。

進制計數兩種方法

  • 位置計數法

    \[(N)_{R} = a_{n-1} a_{n-2} ... a_1a_0 \cdot a_{-1}a_{-2} ... a_{-m} \]

    • 例如: (524.27)10

    \[= 5 \times 10^2 + 2 \times 10^1 + 4 \times 10^0 + 3 \times 10^{-1} + 7 \times 10^{2} \]

  • 多項式表示法: 根據位置計數法, 可得到任意(R)進制數的展開式的普遍形式:

    \[(N)_R = \sum_{i=-m}^{n-1}{a_iR^i} \]

    • R 稱為計數的 基數
    • a_i 是第i位的 系數
    • R^i 稱為第i位的

十進制

  • 基數為10, 低位和相鄰高位之間的關系為: 逢十進一

  • 多項式表示法

    \[(N)_{10} = \sum_{i=-m}^{n-1}{a_i \times 10^{i}} \]

    • 其中, a_i 是第i位的系數, 如果N的整數有n位, 小數有m位, 則:

      \[i \in [ n - 1, 0] \cup[-1, -m] \]

二進制

  • 每一位僅有0和1兩個可能的數碼

  • 計數基數為2, 進位關系為:逢二進一

  • 任何一個二進制數D均可以展開為:

    \[(N)_{2} = \sum_{i=-m}^{n-1}{a_i \times 2^{i}} \]

    • 如: (101.11)2

      \[= 1×2^2 + 0×2^1 + 1×2^0 + 1×2^{-1} + 1×2^{-2} \]

八進制

  • 八個 數碼:0~7

  • 計數基數8, 進位關系為: 逢八進一

    \[(N)_{8} = \sum_{i=-m}^{n-1}{a_i \times 8^{i}} \]

    • 如: (145.37)8

      \[=1×8^2 + 4×8^1 + 5×8^0 + 3×8^{-1} + 7×8^{-2} \]

十六進制

  • 十六個不同數碼: 0 ~ 9A, B, C, D, E, F

  • 計數基數16, 進位關系為: 逢十六進一

    \[(N)_{16} = \sum_{i=-m}^{n-1}{a_i \times 16^{i}} \]

    • 如: (4C.F8)16

      \[=4×16^1 + C×16^0 + F×16^{-1} + 8×16^{-2} \]

  • 十六進制中的A ~ F與十進制的對應關系為:
    • A ~ 10
    • B ~ 11
    • C ~ 12
    • D ~ 13
    • E ~ 14
    • F ~ 15

進制轉換

進制互換方法

  • 十進制轉換成任意進制R的普遍方法:

    1. 小數部分乘以R取進位

    2. 整數部分除以R取余數 注意方向

  • 任意進制R轉換成十進制的普遍方法:

    • 按多項式展開並計算;
  • 二進制和十六/八進制相互轉換的方法:

    • 按1位十六/八進制對應於4位/3位/二進制數的對應關系進行轉換
  • 任意進制M和任意進制N之間的相互轉換方法,

    1. 先將M(N)進制數轉換成十進制數,

    2. 再將十進制數轉換成N(M)進制數

二 > 十

  • 按權展開法: 將二進制數展開,再將各項的, 數值按十進制數相加,即得到十進制的值;

    • 例 (1101.011)2

      \[\begin{align} &= 1×2^3 +1×2^2 +0×2^1 +1×2^0 +0×2^{-1} +1×2^{-2} +1×2^{-3} \\ &= 8 + 4 + 0 + 1 + 0 + 0.25 + 0.125 \\ &= (13.375)_{10} \end{align} \]

十 > 二

  • 整數部分

    • 對於十進制整數(N)10, 假設等值的二進制為:

      \[(a_{n-1}a_{n-2}\cdots a_0)_2 \]

    • 那么,

      \[\begin{align} (N)_{10} &= a_{n-1}2^{n-1}+a_{n-2}2^{n-2}+...+a_12^1 + a_02^0 \\ &= 2(a_{n-1}2^{n-2}+a_{n-2}2^{n-3}...+a_1) + a_0 \end{align} \]

    • 則: 將(N)10 除2, 余數為a_0;

    • 如果上式括號內的部分(商)再除以2,余數即a_1;

    • 依此類推, 即可求得:

      \[a_2a_3...a_{n-2}a_{n-1} \]

    • 由以上分析出來胡規律, 可以得到整數部分的轉換方法:

      • 將十進制數反復除2逆序取余數
  • 小數部分

    • 對於十進制小數(S)10, 假設等值的二進制數為:

      \[(0.a_{-1} a_{-2} a_{-3}...a_{-m})_2 \]

    • 那么,

      \[\begin{align} (S)_{10} &= a_{-1}2^{-1} + a_{-2}2^{-2}+...+a_{-m}2^{-m} & (1-1)\\ 2(S)_{10} &= a_{-1}+(a_{-2}2^{-1}+a_{-3}2^{-2}+...+a_{-m}2^{-m+1}) &(1-2) \end{align} \]

    • 規律: 將(S)10乘以2, 整數進位就是a_-1

    • 對式(1-2)中括號內部分乘以2, 整數進位即:

      \[a_{-2} \]

    • 依次類推, 既得:

      \[a_{-3}a_{-4}...a_{-m} \]

    • 由前面的分析可以得到小數部分的轉換方法:

      • 將十進制數反復乘2進行進位, 取順序進位值
    • 不是所有十進制小數都能完整轉換為二進制小數.可能過程會丟失精度.

二 > 十六

  • 四位二進制數對應一位十六進制數, 由位到位排列

  • 不足四位的,整數部分高位補0,小數部分低位補0

  • 例如: (11010110.0101101)2

    \[\begin{align} (& \underline{1101} \ \underline{0110}.\underline{0101}\ \underline{1010})_2 \\ & \ \ \ \downarrow \ \ \ \ \downarrow \ \ \ \ \ \ \downarrow \ \ \ \ \downarrow \\ = (&\ \ \ D \ \ \ \ \ \ 6 \ \ \ . \ \ \ \ 5 \ \ \ \ \ A \ \ )_{16} \end{align} \]

二 > 八

  • 轉換方法: 每三位二進制數對應一位八進制數, 由低位到高位排列

  • 不足三位的,整數部分高位補0,小數部分低位補0。

  • 例如: (11010110.01011010)2

    \[\begin{align} (& \underline{011} \ \underline{010} \ \underline{110}. \underline{010} \ \underline{110} \ \underline{100})_2 \\ & \ \downarrow \ \ \ \downarrow \ \ \downarrow \ \ \ \ \downarrow \ \ \ \downarrow \ \ \ \downarrow \\ = (&\ \ 3 \ \ \ \ \ 2 \ \ \ \ \ 6. \ \ \ \ \ 2 \ \ \ \ \ 6 \ \ \ \ \ 4 \ \ )_{8} \end{align} \]

十六 > 二

  • 轉換方法: 與二 > 十六轉換類似,將十六進制數的每一位用等值的四位二進制數代替。

  • 例如: (7C5.F9)16

    \[\begin{align} (& \ \ \ 7 \ \ \ \ \ \ \ C \ \ \ \ \ 5. \ \ \ \ \ \ \ F \ \ \ \ \ \ \ 9 \ \ \ )_{16} \\ & \ \ \downarrow \ \ \ \ \ \downarrow \ \ \ \ \downarrow \ \ \ \ \ \ \downarrow \ \ \ \ \ \downarrow \\ = (& 0111 \ 1100 \ 0101. \ 1111 \ 1001)_2 \\ \end{align} \]

八 > 二

  • 與八 > 二轉換類似,將八進制數的每一位用等值的三位二進制數代替

    \[\begin{align} (&\ \ 7 \ \ \ \ \ 5 \ \ \ \ 4. \ \ \ \ 3 \ \ \ \ \ 6 \ \ )_{8} \\ & \ \downarrow \ \ \ \downarrow \ \ \downarrow \ \ \downarrow \ \ \ \downarrow \\ = (& 111 \ 101 \ 100. 011 \ 110)_2 \\ \end{align} \]

十六 > 十

  • 方法:與二 - 十 轉換類似,利用式(1-5)將十六進制數按權展開,相加即得。

  • 八進制與十六進制方法相同

  • 例: (B8E.A)16

    \[\begin{align} &= B×16^2 +8×16^1 +E×16^0 +A×16^{-1} \\ &= 11×16^2 +8×16^1 +14×16^0 +10×16^{-1} \\ &= 2816+128+14+0.625 \\ &=(2958.625)_{10} \end{align} \]

十 > 十六

  • 轉換方法1:先將十進制數轉換為二進制數,再將二進制數轉換為十六進制數。

  • 轉換方法2:與十進制轉換成二進制的方法類似,小數部分乘以16取進位,整數部分除以16取余數。

  • 八進制與十六進制方法相同。

  • 例如: (795.6015625)10 = (31B.9A)16

  • 十進制轉換成任意進制R的普遍方法:小數部分乘以R取進位,整數部分除以R取余數。

    • 注意最先得到的都是離小數點最近的那一位


免責聲明!

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



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