IEEE 754 double 編碼為二進位制

2021-06-01 01:59:17 字數 802 閱讀 3818

有些系統的 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...