亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標(biāo)題:
關(guān)于C語言中float、double類型的內(nèi)存轉(zhuǎn)換
[打印本頁]
作者:
toomark
時間:
2020-4-8 10:19
標(biāo)題:
關(guān)于C語言中float、double類型的內(nèi)存轉(zhuǎn)換
C51 平臺上存在數(shù)據(jù)類型限制——double數(shù)據(jù)類型與float數(shù)據(jù)類型皆為32bites,使得double數(shù)據(jù)類型等同于float數(shù)據(jù)類型。
當(dāng)C51在與其它平臺做數(shù)據(jù)通信時,可能被要求提供64bites的double數(shù)據(jù),但它無法用數(shù)據(jù)類型強轉(zhuǎn)實現(xiàn)。因此,專門寫了float轉(zhuǎn)double存儲的函數(shù)。
有關(guān)float、double類型在內(nèi)存中的具體存儲方式,可閱讀相關(guān)博文
https://blog.csdn.net/slience_j/article/details/51965009
實現(xiàn)float存儲轉(zhuǎn)double類型存儲的具體函數(shù)如下:
#pragma pack(1)
struct DOUBLE_MEM
{
char data0;
char data1;
char data2;
char data3;
char data4;
char data5;
char data6;
char data7;
};
#pragma pack()
void float_to_double(float f, struct DOUBLE_MEM *pStrBob)
{
short index; // 指數(shù)
long *pdata = (long *)&f; // 指針指向需轉(zhuǎn)換float數(shù)據(jù)
// 獲取float變量8位有效指數(shù)信息
index = (*pdata >>23)&0x00ff;
// 將8位指數(shù)轉(zhuǎn)換為11位指數(shù)
if(index & 0x0080) // 指數(shù)為正(bit7表示正負(fù),bit0~6為大小)
{
index &= 0x007f; // bit7~15置0
index |= 0x0400; // bit10 置1
}else
{
index |= 0xff80; // bit 7~15置1
index &= 0x03ff; // bit10~15置0
}
// 裝載index指數(shù)信息
pStrBob->data0 = (index>>4)&0x7f; // 將index的高7位(bit4~10位)數(shù)據(jù)放在低7位存儲
pStrBob->data1 = (index &0xf)<<4; // 將index的低4位(bit0~3位)數(shù)據(jù)放在高4位存儲
// 裝載符號信息(存放在最高位)
if(*pdata & 0x80000000)
{
pStrBob->data0 |= 0x80;
}
else
{
pStrBob->data0 &= 0x7f;
}
// 裝載尾數(shù)位(bit0~bit22共23位有效數(shù)據(jù))
pStrBob->data1 |= (*pdata >>19)&0x0f; // 將bit19~22 放至data1的低4位
pStrBob->data2 = (*pdata >>11)&0xff; // 將bit11~18 放至data2
pStrBob->data3 = (*pdata >>3)&0xff; // 將bit3~bit10放至data3
pStrBob->data4 = (*pdata &0x7)<<5; // 將bit0~bit2 放至data4的高3位
pStrBob->data4 &= 0xe0; // data4的低5位清零
pStrBob->data5 = 0x0;
pStrBob->data6 = 0x0;
pStrBob->data7 = 0x0;
}
復(fù)制代碼
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1