位域
位域的定义
struct data {
unsigned short flaga:1;
unsigned short flagb:3;
char flagc:5;
};
1、1/3/5指的是二进制位数,即比特数,而不是字节数。
2、位域的类型只能是整型或字符型。如下面是不正确的
struct data
{
unsigned short flaga :1;
unsigned short flagb :3;
float flagc :5; //只能是整型或char型。
};
3、如果赋值超过了位域的表示范围,则自动取低位数字。
如
data test;
test.flagb = 10;
因为flagb 3位而10即(1010)2,flagb取010即2.
4、如果要跳过某几个二进位时,可以定义一个无名位域。
如果无名位域的宽度为0,则表示下一个位域从新的字节开始。
struct PackedData
{
unsigned flaga:4;
unsigned:2;
int flagb:3;
};