CSAPP 2.6 給出十進制整數 12345 與浮點數 12345.0 的十六進制表示,要求對比二進制位模式的匹配度。這揭示了整數與 IEEE 754 浮點數編碼的本質差異。
| 值 | 十六進制 | 二進制 (32 位) |
|---|---|---|
| 12345 (int) | 0x00003039 | 0000 0000 0000 0000 0011 0000 0011 1001 |
| 12345.0 (float) | 0x4640E400 | 0100 0110 0100 0000 1110 0100 0000 0000 |
int: 0000 0000 0000 0000 0011 0000 0011 1001
float: 0100 0110 0100 0000 1110 0100 0000 0000
************* (13 位連續匹配)
結論:最多可對齊 13 位連續匹配(位置不同)。
| 值 | 十六進制 | 二進制 |
|---|---|---|
| 3510593 (int) | 0x00359141 | 0000 0000 0011 0101 1001 0001 0100 0001 |
| 3510593.0 (float) | 0x4A564504 | 0100 1010 0101 0110 0100 0101 0000 0100 |
int: 0000 0000 0011 0101 1001 0001 0100 0001
float: 0100 1010 0101 0110 0100 0101 0000 0100
********************* (21 位匹配)
結論:最多 21 位連續匹配。
| 視角 | 不匹配區域 | 原因 |
|---|---|---|
| 浮點數視角 | 前 9 位(符號位 1 + 指數 8 位)+ 最後 2 位 | IEEE 754 格式:1 位符號 + 8 位指數 + 23 位尾數。整數無指數欄位,故前 9 位必不匹配;尾數隱含最高位 1 導致低位差異。 |
| 整數視角 | 高位全 0 區域直到首個 1 | 整數無指數,高位補 0;浮點數指數非零(偏移編碼),高位必有 1。 |
深入學習 IEEE 754 單精度格式:
S EEEEEEEE MMMMMMMMMMMMMMMMMMMMMMM
1 位符號、8 位指數(偏移 127)、23 位尾數(隱含最高位 1)。
掌握後可瞬間心算任意 float 的十六進制表示,亦是逆向分析、协议解析的必備技能。