编程中,需要使用到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。
至此解决了,在编程过程中的顺序对应问题。