有些系統的 double 的 sizeof 不為 8,或者 double 在記憶體裡的表示不是 ieee 754 格式,在這種系統中,需要按 ieee 754 的 double 格式傳輸給其它人時,就需要自己寫相應的編碼函式了。
下面是按照 ieee 754 規範,把 double 編碼為二進位制的**:
/* ieee 754 double 編碼為二進位制 */
void packet754(int64_t integer, /* 整數部分 */
int64_t decimal, /* 小數部分 */
uint16_t bits, /* 32 或 64 */
uint8_t* buf /* 輸出緩衝區 */
)else
else
/* 如果整數部分 > 0,先放入整數 */
if (integer > 0)
if (mark&integer)
*bf |= b;}}
else
decimal %= i_1;}}
decimal <<= 1;
/* 小數部分 */
for (; decimal > 0 && bit_used < bits; b >>= 1, ++bit_used)
if (decimal > i_1)
decimal <<= 1;
}/* 剩餘部分填入 0 */
for (; bit_used < bits; bit_used += 8)
/* 填入符號和指數 */
if (bits == 64)
else}}
IEEE 754浮點型儲存方式
最近突然糾結與浮點型到底是怎麼儲存的,看了很多理論描述,以為沒有找到特別詳細的例子,還是一臉懵逼。所以我特意記錄一下浮點型變數儲存方式的例子。以最常用的ieee 754標準為例,單精度浮點型的二進位制主要分為三部分 數符 階數 尾數 階數也包含一位階符,但從儲存上看應該是三部分 公式為 數符x尾數x...
IEEE754標準,從源頭講起
在學習計組的過程中,經常忘記一些細節。比如 符號位 規格化 等等概念。這幾天發覺,如果能夠從這些東西的背景去考慮問題的話,可能就不會有這麼多的遺忘了。浮點數的規格化浮點數的階碼一般使用移碼來表示,並不牽扯到規格化。規格化特指尾數的規格化。尾數可能是補碼或者原碼。當尾數m是原碼,只要滿足1 2 m 1...
單精度浮點數(IEEE754)
單精度浮點數佔據4個位元組,4個位元組的分配如下 a 第一位為符號位,0表示正,1表示負 b 第2 9位為階碼,採用移碼表示 c 第10 32位為尾數,採用原碼表示。1 給定32位串,如何轉換成十進位制數 假設記憶體中存在32位串 cd cc 08 41。因為intel cpu採用little en...