1. 程式人生 > >計算機基礎——IEEE754標準的浮點數的轉化

計算機基礎——IEEE754標準的浮點數的轉化

      IEEE754是現在公認的、最廣泛使用的浮點數轉換運算標準,為許多CPU與浮點運算器所採用。這個標準定義了表示浮點數的格式(包括負零-0)與反常值(denormal number)),一些特殊數值(無窮(Inf)與非數值(NaN)),以及這些數值的“浮點數運算子”;它也指明瞭四種數值舍入規則和五種例外狀況(包括例外發生的時機與處理方式)。

      IEEE 754規定了四種表示浮點數值的方式:單精確度(32位)、雙精確度(64位)、延伸單精確度(43位元以上,很少使用)與延伸雙精確度(79位元以上,通常以80位實現)。只有32位模式有強制要求,其他都是選擇性的。大部分

程式語言都有提供IEEE浮點數格式與算術,但有些將其列為非必需的。例如,IEEE 754問世之前就有的C語言,現在有包括IEEE算術,但不算作強制要求(C語言的float通常是指IEEE單精確度,而double是指雙精確度)。

下面主要講述單精度(float),雙精度(double)和單精度一樣,使用例子來說明轉化過程。

(1)float a = -12.75; a的機器碼是多少?(採用IEEE754標準)

  1. 不規範的表示:-12.75
  2. 轉換整數部分:
    12 = 8 + 4 = 1100(二進位制)
  3. 轉換小數部分:
    .75 = .5 + .25 = .11(二進位制)
  4. 把兩部分組裝起來,變成標準化:
    1100.11 = 1.10011*2^3
  5. 轉換指數部分:
    127 + 3 = 128 + 2 = 1000 0010(二進位制)
  6. 故結果為:
    1000 0010100 1100 0000 0000 0000 0000(二進位制)
  7. 十六進位制表示:
    0XC14C0000(十六進位制)

(2)二進位制1011 11101 110 0000 0000 0000 0000 0000轉化為float是多少?(採用IEEE754標準)

      

  1. Sign:1 => negative(符號位)
  2. Exponent:
               0111 1101(二進位制) = 125(10進位制)    ​​​​
               減去偏置常數:125 - 127 = -2​
  3. Significand:
                
  4.  Repersents:-1.75(十進位制)*2^(-2) = -0.4375    

(3)double num = 10.5的二進位制是多少?

  • 10.5 = 1010.1 = 1.0101 * 2^3
  • 符號位 S=1,階碼 exp = 3 + 1023 = 100 0000 0010B(double 階碼為 11 位),
  • 尾數: 0101 [0000](double 尾數為 52 位)
  • 則其機器數為: 0 100 0000 0010 0101 [0000]= 0x4025 0000 0000 0000