问这个m.c输出的为什么是78啊

img


问这个m.c输出的为什么是78啊,然后ASCII码上也没有这个数啊,而且m.c是以16进制输出

union里面的所有成员共用同一块内存, 这里int是4个字节, long也是4, char是1字节. 那么这个union需要占用这三个里面的最大, 也就是4个字节.
不论是a, 还是b, 都能够完整存储0x12345678, 这个十六进制刚刚好4字节.
但是c是unsigned char, 只能读1个字节, 但是x86是小端模式, 内存的起始地址存放的是最后的一个字节, 也就是0x78, 所以c十六进制输出78

m.c就是m.b的第一个字节
由于windows系统字节存储是先低后高,所以m.b=0x12345678在内存中的实际四个字节序是0x78 0x56 0x34 0x12
union类型是所有成员共享同一块内存,因此m.c就是m.b的第一个字节,所以值为0x78
printf中输入m.c是用%x,即16进制输出,因此m.c=0x78,输出值就是78

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632