我寫了一個小程式,看看我的電腦如何存盤浮點數(這是在 macOS Big Sur 上),結果如下所示:
Float value = 2.000000
Memory representation: 00000000 00000000 00000000 01000000
Float value = 4.000000
Memory representation: 00000000 00000000 10000000 01000000
Float value = 8.000000
Memory representation: 00000000 00000000 00000000 01000001
Float value = 16.000000
Memory representation: 00000000 00000000 10000000 01000001
Float value = 32.000000
Memory representation: 00000000 00000000 00000000 01000010
我相信我正確地列印出這些位,所以我的問題是 macOS 如何存盤浮點數的每個部分?意思是如何將這些位串中的每一個分成指數、小數部分和符號?看起來符號位存盤在最后一個位元組的開頭,而不是像我期望的那樣存盤在第一個位元組的開頭:
Float value = 2.000000
Memory representation: 00000000 00000000 00000000 01000000
Float value = -2.000000
Memory representation: 00000000 00000000 00000000 11000000
uj5u.com熱心網友回復:
您似乎正在以相反的位元組順序列印這些位。Apple 工具使用 IEEE-754 binary32 作為float型別。IEEE-754 只指定位串的編碼;它沒有指定字串的位在記憶體中的排序方式。Apple 工具將位字串存盤在記憶體中,就好像這些位被解釋為二進制數字(最高有效位在前)并且具unsigned int??有該值的一個被寫入記憶體。
編碼 2 的位串是 01000000 00000000 00000000 00000000。
編碼 4 的位串是 01000000 10000000 00000000 00000000。
編碼 8 的位串是 01000001 00000000 00000000 00000000。
編碼 16 的位串是 01000001 10000000 00000000 00000000。
編碼 32 的位串是 01000010 00000000 00000000 00000000。
在如上所示的字串中,第一位編碼符號。接下來的八位編碼指數和有效數字的第一位。最后 23 位對有效數字的剩余位進行編碼。
對于 32,第一位是 0,表示 或 (-1) 0 = 1。
接下來的 8 位是 10000100。以二進制表示,它們表示值 132。它以 127 的偏差對指數進行編碼,因此表示的指數為 132?127 = 5,因此浮點數的比例為 2 5 . 此外,這些位不是全零(也不是全一)的事實意味著有效數字的前導位是 1。
剩余的 23 位為零,因此有效數的剩余位為零。因此,二進制的有效數字是 1.00000000000000000000000。
所以表示的數字是 1?2 5 ?1.00000000000000000000000 = 32。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/507409.html
上一篇:從檔案中查找并提取數字
下一篇:本地主機顯示“索引”頁面
