在计算机中,数据是以0和1两种形态进行表述的,而每个0和1都占据了一个位(bit)的大小,8个位(bit)可以组成一个字节(byte),一个字节就是计算机里数据类型的最小基本单位,如:char在32bit系统中大小为一个字节(byte)。但我们应该知道,虽然字节是最小的数据类型基本单位,但有时候我们或许是用不完这一个字节的,如:我们要表示一个开关量的时候,它就两种情况:0和1嘛,若我们申请了一个字节,那剩下的七个位岂不是浪费了?所以C中就有了位域(bit-field)的概念,后来C++为了支持底层编程也从C中继承来了这个概念(它属于固有的不可移植特性,不可移植特性指的是依赖于具体机器的特性)。
位域的定义形式:变量名 : 具体大小,如:
struct bf {
char a : 4;
char b : 4;
}
上面例子的意思很简单:在结构体内定义了一个占四位的char类型变量a,以及另一个占四位的char类型变量b.我们可以用代码sizeof(bf)测试一下bf的大小,我们可以发现bf大小为1,而不是2,OK,看来这样确实可以节省空间。不过有时候位域的大小可不是简单地把所有位域声明的大小加起来哦,这还涉及到一个内存对齐的问题,这个问题留到以后说,目前只是先了解一下。还有一个问题需要注意一下,或许我们会注意到,a和b各占了四位,那加起来就刚好是一个char类型的大小咯?那是不是它们平分的是同一个字节呢?对于这个问题,以下代码可以检验:
#inc