[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`对应最高位。

 

posted on   风中狂笑  阅读(8)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示