1 常规编码方式
#includetypedef union { struct { int a : 4; int b : 4; int c : 4; int d : 4; int rsv : 16; } valBits; int val; } U_TEST_UNIOn; int main() { U_TEST_UNIOn uTest = {0}; uTest.val = 0x12345678; printf("val: 0x%xn", uTest.val); printf("a: 0x%xn", uTest.valBits.a); printf("b: 0x%xn", uTest.valBits.b); printf("c: 0x%xn", uTest.valBits.c); printf("d: 0x%xn", uTest.valBits.d); printf("rsv: 0x%xn", uTest.valBits.rsv); return 0; }
输出:
常规编码方式 val: 0x12345678 a: 0xfffffff8 b: 0x7 c: 0x6 d: 0x5 rsv: 0x1234
2 省略结构体变量名字
#includetypedef union { struct { int a : 4; int b : 4; int c : 4; int d : 4; int rsv : 16; }; int val; } U_TEST_UNIOn; int main() { printf("省略结构体变量名编码方式n"); U_TEST_UNIOn uTest = {0}; uTest.val = 0x12345678; printf("val: 0x%xn", uTest.val); printf("a: 0x%xn", uTest.a); printf("b: 0x%xn", uTest.b); printf("c: 0x%xn", uTest.c); printf("d: 0x%xn", uTest.d); printf("rsv: 0x%xn", uTest.rsv); return 0; }
输出:
省略结构体变量名编码方式 val: 0x12345678 a: 0xfffffff8 b: 0x7 c: 0x6 d: 0x5 rsv: 0x1234
省略结构体变量名方式,可以由上层直接引用结构体成员变量,在如芯片寄存器定义时,可以增强可读性,不用再在中间增加一层变量,如:
定义:
union {
struct {
int ISS : 25;
int IL : 1;
int EC : 6;
};
int REG_VAL;
} HSR;
使用方法:
1)单次给整个寄存器赋值
HSR.REG_VAL = 0x0;
2)给寄存器各个位域赋值
HSR.ISS = 0x0;
HSR.IL = 0x0;
HSR.EC = 0x0;



