我早就知道 C 中有位域,有时我用它们来定义密集的结构:
typedef struct Message_s {
unsigned int flag : 1;
unsigned int channel : 4;
unsigned int signal : 11;
} Message;
当我阅读开源代码时,我经常会找到位掩码和位移操作来在手动位字段中存储和检索此类信息。这很常见,我认为作者不知道位域语法,所以我想知道是否有理由通过位掩码和移位操作来滚动位域,而不是依赖编译器生成获取和设置此类位域的代码。