以下程序可以帮助您更好地理解:
#include <stdio.h>
typedef union
{
int a;
float c;
char b[20];
}
Union;
void dump(const void* buffer, size_t length)
{
size_t i;
for (i = 0; i < length;) {
printf("%.2x ", reinterpret_cast<const unsigned char*>(buffer)[i]);
++i;
if (i % 16 == 0) {
putchar('\n');
} else if (i % 8 == 0) {
putchar(' ');
}
}
if (i % 16 != 0) {
putchar('\n');
}
}
int main()
{
Union y = {100};
printf("Union y :%d - %s - %f \n",y.a,y.b,y.c);
printf("The content of the Union is: \n");
dump(&y, sizeof y);
}
输出是:
联合 y :100 - d - 0.000000
联盟的内容是:
64 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00
实际上, a(即 a int
)的二进制表示是64 00 00 00
, 100 的 little-endian 十六进制。b的二进制表示是64 00 ...
,0x00 结束字符串,而 0x64 是 'd'。c的二进制表示是64 00 00 00
,在IEEE 浮点表示中是 0.0,因为非零部分是指数。