为什么最后输出会是 8d 97 6e 12 83 c0 f3 3f?

#include<stdio.h>
#include<stdlib.h>
#define D_CHAR union double_char\
{ \
double d; \
unsigned char byte[8];\
}
void shuchu(unsigned char[],int);
int main(void)
{
D_CHAR u;
u.d=1.2345;
shuchu(u.byte,sizeof(u.byte)/sizeof(u.byte[0]));
system("pause");
return 0;
}
void shuchu(unsigned char byte[],int n)
{
int i;
for(i=0;i<n;i++)
{
printf("%02x\n",byte[i]);
}
putchar('\n');
}

完全不懂表达的是什么意思,为什么最后输出会是
8d
97
6e
12
83
c0
f3
3f
谁能跟我说下怎么实现的?

慕娘9325324
浏览 172回答 3
3回答

摇曳的蔷薇

联合体内存就是成员里最大的类型值的大小。很显然这个联合体里 double是最大的,占8个字节,所以这个联合体就是8字节大小。把double变量=1.2345;,然后输出的就是这个联合体内存里存储16进制数值,也就是这个1.2345的数值。如果还不清楚,就看下联合体的概念!~

MM们

哪里不懂了?输出的就是u.d=1.2345;内存中就是 8d 97 6e 12 83 c0 f3 3f。你要输出其他的 就赋其他的值。void shuchu(unsigned char byte[],int n)这个就是把你刚才字段的每个字节数输出来。system("pause"); 是暂停。还有什么不懂的?

浮云间

最后输出的是双精度数1.2345的8位字节表示,其具体的表示方法定义在IEEE里,你只需要知道union的原理就行了,其实用int来做例子就好解释了。
打开App,查看更多内容
随时随地看视频慕课网APP