作者blueblueChen (藍藍欠)
看板C_and_CPP
標題Re: [問題] 二進制的浮點數轉回十進位
時間Sat Jul 23 15:39:34 2016
※ 引述《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
推 chuegou: 第一個跟我理解的相同 就是那筆資料原封不動的搬過去 07/23 15:49
→ chuegou: 但是第二個...記憶體裡面會是0x4f3f2000吧? 07/23 15:52
→ chuegou: 我跑跑看 07/23 15:52
推 chuegou: 是int 所以我也錯XD 07/23 16:04
推 ilikekotomi: 第一個會用原本的資料來當浮點數表示 07/23 16:11
→ ilikekotomi: 第二個在許可範圍內會轉成相同值 i是-1轉過去f也是-1 07/23 16:13
→ longlongint: print %d 07/23 16:16
→ blueblueChen: 指向原本資料的位址強制轉換成 float,就會真的被 07/23 16:23
→ blueblueChen: 轉了 07/23 16:23
→ blueblueChen: 謝C大囉,我大概懂你的意思 07/23 16:26
→ TobyH4cker: 嗯嗯第二個就是一般的cast 07/23 17:09