作者enonrick (EnonRick)
看板C_and_CPP
標題Re: [問題] int array 轉 double point
時間Tue Aug 29 12:05:37 2017
原文刪
===============================
你的printf("%d",*a); 是UB,再怎麼樣也不會有正確的結果,不用糾結為何是1
想要取0x200000001的值也不應該用double接
把你的程式改一下
-------------------------
union ud{
int i[2];
double d;
} d;
d.i[0] = 1;
d.i[1] = 2;
-------------------------
d的值為
http://imgur.com/0Ci2C3m
因x86 的little endian展開 16進位為
00000001 00000002
轉換成2進位
http://imgur.com/lJsWpgq
但你用double接會變成
16進位
00000002 00000001
依 IEEE 754-1985 double 定義全展開
0 00000000000 0000000000000000001000000000000000000000000000000001
即使你轉型long long 值依然是0
正確要用long long 接
long long *ud = (long long *)&d;
printf("dec:%lld hex:%#llx", *ud, *ud);
output:
dec:8589934593 hex:0x200000001
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 125.227.143.169
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1503979540.A.8F5.html
※ 編輯: enonrick (125.227.143.169), 08/29/2017 12:14:00
1F:→ usanhuang: 謝謝大大的解說 這個地方真的是很難注意 08/29 21:11