Re: [問題] printf("%x%x", 0.1);

看板C_and_CPP (C/C++)作者 (CA)時間14年前 (2011/11/10 23:27), 編輯推噓4(4012)
留言16則, 6人參與, 最新討論串3/3 (看更多)
※ 引述《xatier (新生)》之銘言: : 怎麼每次 compile 出來都不一樣 = = : http://i.imgur.com/SkUlc.png
http://www.cplusplus.com/reference/clibrary/cstdarg/ 基本上都是這樣一個一個 pop 出來的 如果你給的變數個數不一樣,呃,那它就會去讀到不知名的空間對吧 那這個不知名的空間會是 double 剩下的那四個 byte 還是你的 A 片開頭的四個 byte, 我也不知道,寶傑你說呢? 附上我是怎麼做的: #include <stdio.h> int main() { unsigned int b[2]; *( double * )b = 0.1; printf( "%x%x\n", b[0], b[1] ); return 0; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.37.57.204

11/10 23:29, , 1F
Wow!! 大推一個!! 晃然大悟!!
11/10 23:29, 1F

11/10 23:31, , 2F
懂了,原來是這樣 感謝 <(__ __)>
11/10 23:31, 2F

11/10 23:32, , 3F
不過我這裡 (vs 2008,gcc 4.5.1) 去跑 4.5, 顯示0 XD
11/10 23:32, 3F

11/10 23:33, , 4F
這樣似乎會有問題吧?b抓到的只是 16/64 ?
11/10 23:33, 4F

11/10 23:34, , 5F
因為我耍笨,這樣是 2 byte 不是 8 byte XD
11/10 23:34, 5F

11/10 23:35, , 6F
難怪我剛剛覺得自動填的 ff 有點多
11/10 23:35, 6F
※ 編輯: legnaleurc 來自: 114.37.57.204 (11/10 23:35)

11/10 23:40, , 7F
小挑個毛病,出來的結果也是 hi/low 倒過來的。b[1]b[0]
11/10 23:40, 7F

11/10 23:41, , 8F
但顛倒的結果可能就是原 po 要的。
11/10 23:41, 8F

11/10 23:41, , 9F
這 ... 我猜跟 endian 有關了
11/10 23:41, 9F

11/10 23:44, , 10F
endian 的問題老師有說過,這個我知道:D
11/10 23:44, 10F

11/11 00:40, , 11F
想請教一下 那問什麼原原PO之前的測試結果 不會前4BYTE
11/11 00:40, 11F

11/11 00:40, , 12F
或後4BYTE會一樣 而是一直變換~"~
11/11 00:40, 12F

11/11 10:47, , 13F
我的感覺是0.1轉換成二進位的話,本來就只能得到相似值
11/11 10:47, 13F

11/11 10:48, , 14F
只是原因好像並不在這.尤其是我不會asm.也無法真的抓錯
11/11 10:48, 14F

11/11 13:42, , 15F
原因大概出在那是64bit環境 因為他的asm code來看
11/11 13:42, 15F

11/11 13:42, , 16F
那兩個long一開始就被轉換了 所以沒有這個近似問題
11/11 13:42, 16F
文章代碼(AID): #1Ek-rei8 (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 3 篇):
文章代碼(AID): #1Ek-rei8 (C_and_CPP)