看板 C_and_CPP 關於我們 聯絡資訊
各位版大好...想請教一個問題 假設我想指定一個hex給一個float變數 比如說...0xBF9DF3B6 在float內是 -1.234 寫了一段測試的程式 uint32_t i = 0xBF9DF3B6; float f = *(float*)&i; cout << f << endl; float f2 = 0xBF9DF3B6; cout << f2 << endl; 執行結果 f : -1.234 f2 : 3.2148e+09 一直搞不太懂為什麼非得用float *轉型呢? 還請各位版大能為小弟解惑...謝謝!! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.230.228.107 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1476515575.A.621.html
stupid0319: 因為float f2 = 0xBF9DF3B6,所以f2 = 0xBF9DF3B6 10/15 15:44
stupid0319: 記憶體存放還有指標運用跟浮點數IEEE 754翻書多看一下 10/15 15:47
pttworld: int i = 0xBF9DF3B6; float f = i; 10/15 15:51
stupid0319: 樓上也沒睡飽嗎 10/15 16:00
pttworld: 樓上,多些口水可以淹死我但不一定能叫醒我。 10/15 17:55
ilikekotomi: f2的case會自動幫你轉型成float 10/15 18:11
LPH66: 給原 PO: 請思考 float f = 1; 的意思 10/16 00:32
firejox: 沒有hex的type啊 hex跟整數是一樣的 10/16 01:35
jim22: ㄘㄘㄨㄗㄔ 10/16 09:38
chuegou: 我以為這樣寫就會直接放進去...是因為我是寫mcu? 10/16 16:03
chuegou: 我好像漏掉什麼前提... 10/16 16:04
CoNsTaR: 樓上 是這樣吧 int i = xxx; float *f = (float*)&i; 10/16 17:45
chuegou: 我想我疑問產生的點 是因為有號數會直接放進去 10/16 18:20
LPH66: 「直接放進去」? 10/16 23:58
LPH66: 能貼一下會「直接放進去」的程式嗎? 10/17 00:01
hakman: 原po 誤會了什麼吧... 10/17 11:22
hakman: 基本上轉型是設計最通常的方法,樓上的大大就有給出例子 10/17 11:23
hakman: float f = 1,若照你直接給binary 的想法,這個f 等於 0.0 10/17 11:23
hakman: 可是出來的f=1.0 ,hex 也是沿用這個想法,所以f2 才會那 10/17 11:24
hakman: 麼大 10/17 11:24
chuegou: http://ideone.com/aeHR0l 抱歉拖了一天 10/17 21:56
chuegou: 我感覺我漏掉了什麼... 10/17 21:57
firejox: union 吧 我猜 10/19 13:54