跳到主要内容

位域

Bit Field

定义

简单的说,位域就是小一点的普通变量
位域是一种特殊的存储方式,可以用小于sizeof(type)的大小进行存储


一些性质

位域按顺序从低位到高位排列
同一级下的位域遵循一定的规律进行压缩:

使用位域的主要目的是压缩存储,其大致规则为:

  1. 如果相邻位域字段的类型相同,且其位宽之和小于类型的sizeof大小,则后面的字段将紧邻前一个字段存储,直到不能容纳为止;
  2. 如果相邻位域字段的类型相同,但其位宽之和大于类型的sizeof大小,则后面的字段将从新的存储单元开始,其偏移量为其类型大小的整数倍;
  3. 如果相邻的位域字段的类型不同,则各编译器的具体实现有差异,VC6采取不压缩方式,Dev-C++采取压缩方式;
  4. 如果位域字段之间穿插着非位域字段,则不进行压缩;
  5. 整个结构体的总大小为最宽基本类型成员大小的整数倍。

Union下的位域

位域写在union下,就会受到union影响
union所有变量共用一个内存
所以所有的位域都用的是一块内存,就不存在顺序
统一从最低位开始存储
所以在union中直接使用位域和普通变量没有任何区别
如果要呈现“分块”的功能
就要在union中嵌套一个struct
普通的变量也是一样的

union Test{
struct{
int c : 8;
int b : 8;
int a : 16;
//从低位到高位,倒着写
}
int total;
//这样total就是二进制位运算的a+b+c
}