看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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
chuegou: http://imgur.com/a/xkuOm 給你參考囉 07/23 16:23
blueblueChen: 指向原本資料的位址強制轉換成 float,就會真的被 07/23 16:23
blueblueChen: 轉了 07/23 16:23
blueblueChen: 謝C大囉,我大概懂你的意思 07/23 16:26
TobyH4cker: 嗯嗯第二個就是一般的cast 07/23 17:09