2019-06-12

C中的位域(Bit Fields)

声明结构体时,可使用位域

如(以下以x86为例):


[code lang="cpp"]
struct BitField
unsigned int a:8;
unsigned int b:4;
unsigned int c:4;

[/code]

sizeof(BitField)为4


[code lang="cpp"]
struct BitField
unsigned int a:4;
unsigned int :0;
unsigned int b:8;

[/code]

sizeof(BitField)为8


使用规则:


Bit Filed不能跨字节,也就是最大不可以超过8,也就是1Byte,超过时可编译,但只能用到1Byte
使用0位域来使用新的字节,在一个字节不够用时使用
在不使用pack时,偏移为整个结构体最大成员占用的字节数,整个结构体为最大成员占用字节的整数倍

位域操作在开发系统内核/驱动程序时尤其好用。如CR3寄存器等结构,可以直接使用C struct模拟。

没有评论:

发表评论