作者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/cn.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