大小端模式
大端模式,是指数据的
高字节
保存在内存的低地址
中,而数据的低字节
保存在内存的高地址
中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;
小端模式,是指数据的高字节
保存在内存的高地址
中,而数据的低字节
保存在内存的低地址
中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致。
测试
union data
{
int a;
int b[2];
float c;
double d;
char e[4];
}test;
test.a = 0x11223344;
//test.c = 0x11223344;
//test.d = 0x1122334455667788;
printf("%d %d %d\n",sizeof(data),sizeof(test.c),sizeof(test.d)); // 8 4 8
printf("%x %x %x %x\n",&test.e[0],&test.e[1],&test.e[2],&test.e[3]);// 28fe40 28fe41 28fe42 28fe43
printf("%x %x %x %x\n",test.e[0],test.e[1],test.e[2],test.e[3]); // 44 33 22 11
printf("0x%x\n",test.b[0]); // 0x11223344
printf("0x%x\n",test.d); // 0x11223344
printf("0x%x\n",test.c); // 0x80000000
printf("0x%x 0x%x 0x%x 0x%x\n",&test,&test.a,&test.c,&test.d); // 0x28fe40 0x28fe40 0x28fe40 0x28fe40
- 可以知道联合体变量test的地址和联合体内的成员的地址都是一样的
- 可以知道此机器为小端模式(网络传输:大端;Java:大端;ARM:大端;Intel:小端)
- 整个联合体的大小跟联合体内的最大的一个成员的大小相同
- int类型和float类型在内存中存放的格式是不一样的