C语言共用体问题!~在线等

来源:百度知道 编辑:UC知道 时间:2024/06/18 05:51:56
union u_type
{
int i;
char ch;
float a;
}temp;
现在执行"temp.i=266;printf("%d",temp.ch)"的结果是什么?
是在TC环境下

由于int 在win32模式下是32bit的
所以266 表示为 0x00000010a
存放时第1个字节是0x0a
所以ch=0x0a = 10

不同的硬件会有不同的结果。
现在PC主流平台用的是低位在前(Little Endian),int一般也是32位的,266 16进制为10A,内存中存储为0A010000, 所以打印结果是10(内存中第一个char 0A的十进制数字)。
在某些硬件上CPU采用高位在前(Big Endian),32位的话266表示为0000010A,打印出来将是0.
如果这个硬件的int类型是16bit的话(理论上存在这种可能),打印出来将是1.