[good]union

发布时间 2023-11-30 14:35:38作者: 风中狂笑
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`对应最高位。