是的。为什么不输出12而是78呢? 为何要舍掉前3个字节。
追答/*
数据在内存中存放遵循高低原则
也就是高字节内容存放在高地址
低字节内容存放在低地址
所以,0x12345678在内存中是这样存放的
78的二进制
56的二进制
34的二进制
12的二进制
从上到下地址依次增加
通常这组数据的第一个内存单元的地址
也就是78对应的内存单元编号
表示整体的内存地址
如果是int类型就取出这4个字节
如果是float类型就从低字节开始取出一个字节
所以只能取出78
*/
b是 char型的。有一个c程序是这样的:
#include
viod main()
{ union
{long i;
char ii;
char s[4];
}mix;
mix.i=0x12345678;
printf("mix.i = %lx\n",mix.i);
printf9"mix.ii=%x\n",mix.ii);
printf("mix.s[0]\t mix.s[1]=%x\n",mix.s[0],mix.s[1]);
}
为什么他的输出是
mix.i=12345678
mix.ii=78
mix.s[0]=78 mix.s[1]=56
char 是8位的,一般我们的程序默认使用的是小端存储。 0x12345678,前面6个数字被舍掉了。只剩最小的8位了,也就是0x78.
union 是联合体,取最大的地址空间为它的空间。 mix里的就是long
mix.i=12345678 // 一般long32位够用了,输出正常
mix.ii=78 //同char
mix.s[0]=78 mix.s[1]=56 因为小端存储在内存的存储地址顺序为 78 56 34 12。