看板 Examination 關於我們 聯絡資訊
根據 IEEE 754 二進位浮點數算術標準,請問下列 C 語言程式碼執行後輸出為何? int main(){ float A = 100; float B = -125.53125; printf("%08X\n", *(unsigned int *) &A); printf("%08X\n", *(unsigned int *) &B); } 解答: 42C80000 C2FB1000 我的想法: 在*(unsigned int *) &A這部分 是強制轉換成一個無號整數型態的指標變數 並指向A的位址 而最前方的*則代表會顯示A位址的內容(值) 也就是最後會以無號整數的型態顯示出A的內容 ====================================================== 以上是我的想法若有錯誤還請糾正 解答部分是將100用浮點數表示法轉換成 01000010110010000000000000000000 也就是浮點數的32位元 再將這32位元用16進位表示法顯示出來成為42C80000 但今天我自己在程式中加入以下敘述 float C = 100; printf("%08X", (unsigned int) C); 則只顯示成00000064 為何電腦不會先轉換成浮點數表示法再用16進位去做轉換 而是直接將100轉成16進位? 還請知道的大大提點 感謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 223.138.252.235 ※ 文章網址: https://www.ptt.cc/bbs/Examination/M.1494751855.A.A85.html ※ 編輯: blueclock (223.138.252.235), 05/14/2017 17:01:56
manlike: 扯ㄟ...你程式又沒取指標 (unsigned int) &C 05/14 17:21
manlike: * 05/14 17:27
manlike: 看懂你的問題啦~ 因為你是直接轉型所以就變100啦 05/14 17:38
manlike: (unsigned int) C; //已經變成整數表示法 05/14 17:40
pt7441: (int)強制轉型 (int*) 以int解析值 05/14 18:03
感謝大大的回覆 抱歉 問題敘述的有點複雜 簡單來說就是同樣將浮點數變數強制轉換成無號整數 為何會有兩種不一樣的表示方式? ※ 編輯: blueclock (223.138.252.235), 05/14/2017 20:57:26
gfxg: 反正一定是考你電腦內部是怎麼表示浮點數,一定是考IEEE 754 05/14 21:57
gfxg: 那個指標的型別轉換想好久還是想不懂 05/14 21:58
lingpxs: (unsigned int) C 這個動作是把以浮點存放的42C80000轉 06/07 18:23
lingpxs: 成 數值100 再用umsigned int方式來表示100的資料存放方 06/07 18:23
lingpxs: 式 所以00000064 06/07 18:23