C++---联合体(union)的一些测试

来源:互联网 发布:剑灵人族捏脸数据图表 编辑:程序博客网 时间:2024/06/02 23:45

大小端模式

这里写图片描述

大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;
小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致。

测试

    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
  1. 可以知道联合体变量test的地址和联合体内的成员的地址都是一样的
  2. 可以知道此机器为小端模式(网络传输:大端;Java:大端;ARM:大端;Intel:小端)
  3. 整个联合体的大小跟联合体内的最大的一个成员的大小相同
  4. int类型和float类型在内存中存放的格式是不一样的
0 0
原创粉丝点击