105年程式設計考古題 - 考試

Table of Contents


根據 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進位?

還請知道的大大提點 感謝

--

All Comments

Jack avatarJack2017-05-19
扯ㄟ...你程式又沒取指標 (unsigned int) &C
Elma avatarElma2017-05-21
*
Ethan avatarEthan2017-05-22
看懂你的問題啦~ 因為你是直接轉型所以就變100啦
Tristan Cohan avatarTristan Cohan2017-05-24
(unsigned int) C; //已經變成整數表示法
Lily avatarLily2017-05-26
(int)強制轉型 (int*) 以int解析值
Steve avatarSteve2017-05-28
反正一定是考你電腦內部是怎麼表示浮點數,一定是考IEEE 754
Eartha avatarEartha2017-05-29
那個指標的型別轉換想好久還是想不懂
Zenobia avatarZenobia2017-05-31
(unsigned int) C 這個動作是把以浮點存放的42C80000轉
成 數值100 再用umsigned int方式來表示100的資料存放方
式 所以00000064