首页 / 资讯中心 / 文章详情

C语言位域概念

C语言位域概念 ★ FEATURED ARTICLE
struct Status { unsigned int led : 1; // 只占 1 位0 灭 / 1 亮 unsigned int key : 1; // 只占 1 位按键状态 unsigned int adc : 4; // 占 4 位0~15 unsigned int mode : 3; // 占 3 位0~7 };注意一个关键概念位域的分配单位不是字节而是存储单元allocation unit也就是类型unsigned int——4 字节 32 位。四个成员一共只用 9 位全都塞在这一个 32 位单元里所以sizeof(struct Status) 4。结构体中的类型不强求一致但是一般是一样的版本 1全部同类型 → 挤进一个 4 字节单元 struct Same { unsigned int a : 3; unsigned int b : 5; unsigned int c : 4; }; // GCC/x86-64: sizeof 4 354 12 位全在一个 int 里 版本 2类型不同 → 每个类型各占一个单元 struct Diff { unsigned int a : 3; int b : 5; // 类型变了 → 新单元 unsigned int c : 4; // 又变回去 → 又一个新单元 }; // GCC/x86-64: sizeof 12
阅读完成 · 觉得有帮助?
咨询建站