C语言union联合体,在内存中的排列!

来源:互联网 发布:角度计算器软件 编辑:程序博客网 时间:2024/05/22 02:41

编程中,需要使用到union联合体,不清楚到底在内存中是怎么对应的,所以写了个测试的函数,进行测试了下。发现bit位按照定义,定义在前的为实际的低位

#include <stdio.h>typedef unsigned long  u32;typedef unsigned short u16;typedef struct  {      // bits description   u16 DI0:1;          // 0       u16 DI1:1;          // 1       u16 DI2:1;          // 2       u16 DI3:1;          // 3       u16 DI4:1;          // 4       u16 DI5:1;          // 5     u16 DI6:1;          // 6      u16 DI7:1;          // 7   u16 DI8:1;          // 8       u16 DI9:1;          // 9       u16 DI10:1;         // 10       u16 DI11:1;         // 11     u16 DI12:1;         // 12      u16 DI13:1;         // 13                u16 rsvd:2;     // 15:14 reserved}DIREG_BITS;typedef union  {   u16  all;   DIREG_BITS  bit;}DI_REG;int main(){DI_REG di_reg;    di_reg.bit.DI0 = 1;    di_reg.bit.DI1 = 0;    di_reg.bit.DI2 = 0;    di_reg.bit.DI3 = 0;    di_reg.bit.DI4 = 0;    di_reg.bit.DI5 = 0;    di_reg.bit.DI6 = 0;    di_reg.bit.DI7 = 0;    di_reg.bit.DI8 = 0;    di_reg.bit.DI9 = 0;    di_reg.bit.DI10 = 0;    di_reg.bit.DI11 = 1;    di_reg.bit.DI12 = 1;    di_reg.bit.DI13 = 1;    printf("di_reg.all = %d\n",di_reg.all);sleep(50000);return 0;}

测试结果:打印结果为14437



10进制14337转换为2进制为:11100000000001。

至此解决了,在编程过程中的顺序对应问题。


原创粉丝点击