[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`对应最高位。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!