1.3 補數


對應方式

超碼 (Excess code)

  • excess - α code => 代表超 α 碼
  • 一般若有 N bit 則超 2^N-1 碼, 即 excess - 2^N-1 code
  • ex: 5 bits 一般為 excess - 2^5-1 code
  • 令: x: 原始值, α: 超碼, c: 超碼後內容, 則: c = x + α

ex1: (1011.11)2, 若格式 S(1) C(5) M(10), 問以
(1) excess-16 表示
(2) 以 2’s complement 表示 the result?
Sol:
正規化 = +(0.101111)2 * 2^4
(1) excess-16

S C M
0 10100 1011110000

α = 16
c = x + α = 4 + 16 = 20

(2) 2’s complement
+4 = 00100

S C M
0 00100 1011110000

ex2: 5 bits, 採 excess-16, 則
(1)x = -12, c = ?
(2) x = 3, c = ?
(3) c = 01001, x = ?
(4) c = 11011, x = ?
(5) x 可表示的 range?
Sol:

  1. c = x + α = -12 + 16 = 4 = (00100)excess-16
  2. c = x + α = 3 + 16 = 19 = (10011)excess-16
  3. c = (01001)10 = 9, x = c - α => 9-16 = -7
  4. c = (11011) = 27, x = 27 - 16 = 11
  5. 計算組合
    c 最小(0) 最大(11111)
    -16 16
    x: -16 ~ + 15 => 同 2’s 補數表示法

ex3: (0.00001101)2, 若格式 S(1) C(5) M(10), 問以
(1) excess-16表示
(2) 以 2’s complement 表示的 result?
Sol:
正規化 = +(0.1101)2 x 2^-4
(1) excess-16
c = x + α
-4 + 16 = 12

S C M
0 01100 1101000000

(2) 2’s complement
+4 = 00100 => -4 = 11100

S C M
0 11100 1101000000

ex4:[反向題] - floating-point 格式 S(1) C(5) M(10), 內容為: 1110011110100100, 若指數分別以
(1) excess-16
(2) 2’s complement, 求原始值?
Sol:
(1)

S C M
1 11001 1110100100
=> -(0.1110100100)2 x 2^9
x = c - α => 25 - 16 = 9

(2)

S C M
1 11001 1110100100
=> -(0.1110100100)2 x 2^-7
2’s complement 表示法 1 1001 => -0111 = -7

Floating-point 的邊界值

  • 最大正數, 最小正數, 最大負數, 最小負數
  1. 圖示:

  2. 註明:
    |1| = |4|
    |2| = |3|
    => 只差正負數

  3. ex: floating-point 格式: S(1) C(5) M(10), C 用 excess-code 表示, 則:
    (1) 最大值:(正數, 指數最大, 尾數最大)
    所以 Max = +(0.1111111111)2 x 2^15 = +(1-2^-10) x 2^15 = 2^15-2^5
    (2) 最小正數(正數, 指數最小, 尾數最小)
    所以 最小正數 = +(0.1) x 2^-16 = +2^-17
    (3) 最大負數(負數, 指數最小, 尾數最小)
    所以 最大負數 = -(0.1) x 2^-16 = -2^-17
    (4) 最小值
    所以 Min = -(0.1111111111)2 x 2^15 = -(1-2^-10) x 2^15

  4. Note:
    (0.1…1)2 = 1 - 2^-N
    (0.0…01)2 = 2^-N
    (100…0)2 = 2^N
    (1…1)2 = 2^N - 1

IEEE754 浮點數表示法

分為:

  • 單精確度 Single precision => 32 bits
    => S(1) C(E)(8) M(F)(23)
    => 正規化表示方式:
  • 倍精確度 Double precision => 64 bits
    => S(1) C(11) M(52)
    => 正規化表示方式:

特殊值

  1. E = 255, F = 0 => 代表正無限大
    255 代表全為 1 時, 保留給系統不可使用
  2. E = 0, F = 0 => 代表正負0
    0 代表全為 0 時, 保留給系統不可使用
  3. E = 255, F != 0 => 代表 NaN(Not a number)
  4. E = 0, F != 0 => 代表無法正規化

ex: (98.625)10, 以 IEEE754 單精確表示之結果 = ?
Sol:
c = x + α = 6 + 127 = 133

(98.625)10
= + (1100010.101)2
= +(1.100010101)2 x 2^6

S C M
0 10000101 10001010100000000000000
=> (42C54000)16