1 #include2 #include3main()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
int
main()
參***:
該項程式輸出如下所示,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才是真...