計算機基礎——IEEE754標準的浮點數的轉化
阿新 • • 發佈:2018-12-31
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標準)
- 不規範的表示:-12.75
- 轉換整數部分:
12 = 8 + 4 = 1100(二進位制) - 轉換小數部分:
.75 = .5 + .25 = .11(二進位制) - 把兩部分組裝起來,變成標準化:
1100.11 = 1.10011*2^3 - 轉換指數部分:
127 + 3 = 128 + 2 = 1000 0010(二進位制) - 故結果為:
1 1000 0010100 1100 0000 0000 0000 0000(二進位制) - 十六進位制表示:
0XC14C0000(十六進位制)
(2)二進位制1011 11101 110 0000 0000 0000 0000 0000轉化為float是多少?(採用IEEE754標準)
- Sign:1 => negative(符號位)
- Exponent:
0111 1101(二進位制) = 125(10進位制)
減去偏置常數:125 - 127 = -2 - Significand:
- 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