看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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
tropical72:Wow!! 大推一個!! 晃然大悟!! 11/10 23:29
xatier:懂了,原來是這樣 感謝 <(__ __)> 11/10 23:31
tropical72:不過我這裡 (vs 2008,gcc 4.5.1) 去跑 4.5, 顯示0 XD 11/10 23:32
tropical72:這樣似乎會有問題吧?b抓到的只是 16/64 ? 11/10 23:33
legnaleurc:因為我耍笨,這樣是 2 byte 不是 8 byte XD 11/10 23:34
legnaleurc:難怪我剛剛覺得自動填的 ff 有點多 11/10 23:35
※ 編輯: legnaleurc 來自: 114.37.57.204 (11/10 23:35)
tropical72:小挑個毛病,出來的結果也是 hi/low 倒過來的。b[1]b[0] 11/10 23:40
tropical72:但顛倒的結果可能就是原 po 要的。 11/10 23:41
legnaleurc:這 ... 我猜跟 endian 有關了 11/10 23:41
xatier:endian 的問題老師有說過,這個我知道:D 11/10 23:44
hateexam:想請教一下 那問什麼原原PO之前的測試結果 不會前4BYTE 11/11 00:40
hateexam:或後4BYTE會一樣 而是一直變換~"~ 11/11 00:40
angleevil:我的感覺是0.1轉換成二進位的話,本來就只能得到相似值 11/11 10:47
angleevil:只是原因好像並不在這.尤其是我不會asm.也無法真的抓錯 11/11 10:48
x000032001:原因大概出在那是64bit環境 因為他的asm code來看 11/11 13:42
x000032001:那兩個long一開始就被轉換了 所以沒有這個近似問題 11/11 13:42