[good]union
typedef union { uint16_t word; struct { uint8_t low; uint8_t high; } byte; struct { uint8_t bit0 : 1; uint8_t bit1 : 1; uint8_t bit2 : 1; uint8_t bit3 : 1; uint8_t bit4 : 1; uint8_t bit5 : 1; uint8_t bit6 : 1; uint8_t bit7 : 1; uint8_t bit8 : 1; uint8_t bit9 : 1; uint8_t bit10 : 1; uint8_t bit11 : 1; uint8_t bit12 : 1; uint8_t bit13 : 1; uint8_t bit14 : 1; uint8_t bit15 : 1; } BIT; } WORD_BYTE;
在你的`union`定义中,`word`成员和`BIT`成员共享同一块内存。这意味着,当你修改`word`成员的值时,`BIT`成员的值也会随之改变。同样,当你修改`BIT`成员的值时,`word`成员的值也会随之改变。
在你的`union`定义中,`word`成员是一个`uint16_t`类型,也就是一个16位的无符号整数。当你给`word`成员赋值时,你实际上是在设置这16位的值。例如,如果你写`wb.word = 0xABCD;`,你就是在设置这16位的值为`0xABCD`。这个值的二进制表示为`1010 1011 1100 1101`,其中最左边的位是最高位,最右边的位是最低位。
然后,你可以通过`BIT`成员来访问这16位中的每一位。例如,`wb.BIT.bit0`对应最低位,`wb.BIT.bit15`对应最高位。