在如上定义中,bit_field_s
结构体只占用一个DWORD的空间,即4个字节。其中成员a占用5位,成员b占用3位,成员c占用20位,成员d占用4位。我们可以对bit_field_s
结构体的成员进行如下赋值:
在如上定义中,最后一个成员只是用于占位,使
结构体按DWORD对齐。而如下定义就和上面的定义是一样的效果:
对于位字段中的成员不能用位操作符进行运算,因为它们没有地址。考虑到字节存放的
大端小端的问题,使用位字段定义的数据不能在不同
字节顺序的机器之间移动。因此,从理论上来说,使用位字段的程序是不可移植的。
其实,我们完全可以用
位操作来实现位字段的功能,它们在编译后的代码与效率上是一样的。