位域
Bit Field
定义
简单的说,位域就是小一点的普通变量
位域是一种特殊的存储方式, 可以用小于sizeof(type)的大小进行存储
一些性质
位域按顺序从低位到高位排列
同一级下的位域遵循一定的规律进行压缩:
使用位域的主要目的是压缩存储,其大致规则为:
- 如果相邻位域字段的类型相同,且其位宽之和小于类型的sizeof大小,则后面的字段将紧邻前一个字段存储,直到不能容纳为止;
- 如果相邻位域字段的类型相同,但其位宽之和大于类型的sizeof大小,则后面的字段将从新的存储单元开始,其偏移量为其类型大小的整数倍;
- 如果相邻的位域字段的类型不同,则各编译器的具体实现有差异,VC6采取不压缩方式,Dev-C++采取压缩方式;
- 如果位域字段之间穿插着非位域字段,则不进行压缩;
- 整个结构体的总大小为最宽基本类型成员大小的整数倍。
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
}