1. Bit Field 介绍
位字段是一个signed char、unsigned char、signed int、unsigned int 中一组相邻的位。位字段一个结构声明创建,该结构声明为每个字段提供标签,并决定字段的宽度(位数)。以 int 型为例,如:
struct Field{
unsigned int a : 1; //a占1位
unsigned int b : 2; //b占2位
unsigned int c : 2; //c占2位
unsigned int d : 3; //d占3位
}; //共占了8位
struct Field field;
field.a = 1; //a = 01 (二进制)
filed.b = 2; //b = 10 (二进制)
filed.c = 3; //c = 11 (二进制)
field.d = 3; //d = 011 (二进制) 注意:赋值时不要超出字段的容量,如:d的最大值为7(111)
变量 filed 被存储在一个int大小的存储单元中,这个例子中仅有其中的八位被使用。
声明的总位数超过一个unsigned int 的大小,那将会使用下一个unsigned int 存储位置。不允许一个字段跨越两个unsigned int 之间的边界。编译器自动的移位一个这样的字段定义,使字段按unsigned int 边界对齐。发生这种情况时,会在第一个unsigned int 中留下一个未命名的洞(unnamed hole )。
可以使用未命名的字段“填充”(pad)未命名的洞。
如果使用一个宽度为 0 的未命名的字段,则迫使下一个字段与下一个整数对齐。如: