Re: [問題] 二進制的浮點數轉回十進位

看板C_and_CPP作者 (藍藍欠)時間8年前 (2016/07/23 15:39), 編輯推噓4(408)
留言12則, 5人參與, 最新討論串2/2 (看更多)
※ 引述《blueblueChen (藍藍欠)》之銘言: : 最近有需要,發現網路上都沒有這資訊,只有些操作頁面,直接告訴你答案 : 想要把他寫下來成為自己的 C library : 12.625 => 1100.101 = 1.100101 × 2^3 --> 我如果從下面反推到這一步,我該怎麼 : 知道 (1).100101,最前面為1? : .. 因為最下面的十六進位,只有顯示出小數 : 點之後阿 : .. : 1100 0001 0100 1010 0000 0000 0000 0000 : C14A0000 : 這是將十進制的浮點數轉成十六進制,我現在要反推回去求回浮點數 : 在 第一條式子,12.625 => 1100.101 = 1.100101 × 2^3 : 我突然卡住,不知道該怎麼將 (0.101)2 轉回 (0.625)10 : 有先進提點一下嗎? 謝謝。 在網路上有看到一個範例 int i = 0xbf200000; float f = *(float *)&i; printf("%f\n",f); //印出 -0.625 這跟我 int i = 0xbf200000 float f = (float) i; //印出很小的負數字.000 有啥差別阿.... 前面是將指向i的位址強制轉換成 float 的 後者是將 i 值強制轉換成 float 的 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 58.115.110.28 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1469259577.A.383.html

07/23 15:49, , 1F
第一個跟我理解的相同 就是那筆資料原封不動的搬過去
07/23 15:49, 1F

07/23 15:52, , 2F
但是第二個...記憶體裡面會是0x4f3f2000吧?
07/23 15:52, 2F

07/23 15:52, , 3F
我跑跑看
07/23 15:52, 3F

07/23 16:04, , 4F
是int 所以我也錯XD
07/23 16:04, 4F

07/23 16:11, , 5F
第一個會用原本的資料來當浮點數表示
07/23 16:11, 5F

07/23 16:13, , 6F
第二個在許可範圍內會轉成相同值 i是-1轉過去f也是-1
07/23 16:13, 6F

07/23 16:16, , 7F
print %d
07/23 16:16, 7F

07/23 16:23, , 8F
http://imgur.com/a/xkuOm 給你參考囉
07/23 16:23, 8F

07/23 16:23, , 9F
指向原本資料的位址強制轉換成 float,就會真的被
07/23 16:23, 9F

07/23 16:23, , 10F
轉了
07/23 16:23, 10F

07/23 16:26, , 11F
謝C大囉,我大概懂你的意思
07/23 16:26, 11F

07/23 17:09, , 12F
嗯嗯第二個就是一般的cast
07/23 17:09, 12F
文章代碼(AID): #1NanyvE3 (C_and_CPP)
文章代碼(AID): #1NanyvE3 (C_and_CPP)