首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

CSAPP 習題 2.6 解答:整數與浮點數位模式相似度分析

     編輯:關於C語言

CSAPP 習題 2.6 解答:整數與浮點數位模式相似度分析

CSAPP 2.6 給出十進制整數 12345 與浮點數 12345.0 的十六進制表示,要求對比二進制位模式的匹配度。這揭示了整數與 IEEE 754 浮點數編碼的本質差異。

已知數據

值十六進制二進制 (32 位)
12345 (int)0x000030390000 0000 0000 0000 0011 0000 0011 1001
12345.0 (float)0x4640E4000100 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

值十六進制二進制
3510593 (int)0x003591410000 0000 0011 0101 1001 0001 0100 0001
3510593.0 (float)0x4A5645040100 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。

核心洞見

  1. 同樣數值,位模式截然不同:整數用純二進制加權;浮點數用科學記數法編碼(符號+指數+尾數)。
  2. 浮點數非精確表示整數:> 2^24 的 int 無法精確用 float 表示(尾數 23 位 + 隱含 1 = 24 位精度)。
  3. 位模式相似性無語義意義:匹配只是巧合,不可用於類型推斷。

後續學習建議

深入學習 IEEE 754 單精度格式:
S EEEEEEEE MMMMMMMMMMMMMMMMMMMMMMM
1 位符號、8 位指數(偏移 127)、23 位尾數(隱含最高位 1)。
掌握後可瞬間心算任意 float 的十六進制表示,亦是逆向分析、协议解析的必備技能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved