如何讀取float型態資料在記憶體中的值

2022-09-10 21:48:46 字數 948 閱讀 3854

1 #include2 #include3

main()413

14 }

或者

int i;

union q;

q.num=-1;

for(i=3;i>=0;i--)

printf("%x ", q.n[i]);

可以得到一樣的結果

ieee 754:

-1 = -1.0*2^+127 = 1,0111 1111,0000...23個

所以結果: 1,011=b, 1111=f, 1000=8, 0000....=0,00,00 ==>bf800000

---123

4567

89#include

intmain()

參***

該項程式輸出如下所示,012

1095237632

原因是:浮點數是4個位元組,12.5f 轉成二進位制是:01000001010010000000000000000000,十六進製制是:0×41480000,十進位制是:1095237632。所以,第二和第三個輸出相信大家也知道是為什麼了。而對於第乙個,為什麼會輸出0,我們需要了解一下float和double的記憶體布局,如下:

然後,我們還需要了解一下printf由於型別不匹配,所以,會把float直接轉成double,注意,12.5的float和double的記憶體二進位制完全不一樣。別忘了在x86晶元下使用是的反位元組序,高位位元組和低位字位要反過來。所以:

而我們的%d要求是乙個4位元組的int,對於double的記憶體布局,我們可以看到前四個位元組是00,所以輸出自然是0了。

這個示例向我們說明printf並不是型別安全的,這就是為什麼c++要引如cout的原因了

float型別資料在記憶體中如何儲存的?

float型別數字在計算機中用4個位元組儲存。遵循ieee 754格式標準 乙個浮點數有2部分組成 底數m和指數e 底數部分 使用二進位制數來表示此浮點數的實際值 指數部分 占用8bit的二進位制數,可表示數值範圍為0 255 但是指數可正可負,所以,ieee規定,此處算出的次方必須減去127才是真...

float資料在記憶體中的儲存

浮點型變數在計算機記憶體中占用4位元組 byte 即32 bit。遵循ieee 754格式標準。乙個浮點數由2部分組成 底數m 和 指數e。mantissa 2exponent 注意,公式中的mantissa 和 exponent使用二進位制表示 底數部分 使用 進製數來表示此浮點數的實際值。指數部...

float資料在記憶體中的儲存形式

float型別數字在計算機中用4個位元組儲存。遵循ieee 754格式標準 乙個浮點數有2部分組成 底數m和指數e 底數部分 使用二進位制數來表示此浮點數的實際值 指數部分 占用8bit的二進位制數,可表示數值範圍為0 255 但是指數可正可負,所以,ieee規定,此處算出的次方必須減去127才是真...