前文已詳解整數(補碼)在內存中的存儲。本講轉向浮點數,以 IEEE 754 標準為核心,推導 float/double 內存佈局,揭示精度損失的兩大根本原因。
二進制:0000 0011 0000 1101 1111 0001 0110 0100 小端存儲(地址 0x0012FF7C 起):64 F1 0D 03
絕對值二進制 → 按位取反 → +1 → FF A0 EA 0B 小端存儲:0B EA A0 FF
調試器 Memory 窗口驗證完全吻合。
例:19.375 = 10011.0112 = 1.0011011 × 24。
關鍵步驟:整數部分除二取餘,小數部分乘二取整(或分解為 2 的負冪次和)。
| 位段 | 長度 | 說明 |
|---|---|---|
| 符號位 | 1 bit | 0=正,1=負 |
| 指數位 | 8 bits | 移碼表示,基數 127(即 27-1)。實際指數 E = 存儲值 - 127 |
| 尾數位 | 23 bits | 隱含最高位 1,存儲小數點後 23 位,不足右補 0 |
127 + 4 = 131 = 1000001120011011 + 16 個 0 → 001101100000000000000000 10000011 00110110000000000000000 = 0x419B000000 00 9B 41調試器驗證完美匹配。負數僅需將符號位置 1 → 0xC19B0000。
double 緩解但無法根治(超過 52 位同樣失效)。0.001100110011…),無法精確表示,必然產生誤差。透過手工推導編碼過程,可深刻理解浮點數「近似表示」的本質。下一講將系統講解數據類型,這是構建健壯程序的基石。