位域

位域的定义

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;

};

原文地址:https://www.cnblogs.com/helloweworld/p/3177293.html