声明和使用

struct FileAttributes
{
    unsigned int ReadOnly: 1;    
    unsigned int Hidden: 1;
};

这里,这两个字段中的每一个将占用内存中的 1 位。它由变量名后面的 : 1 表达式指定。位字段的基本类型可以是任何整数类型(8 位 int 到 64 位 int)。建议使用 unsigned 类型,否则可能会出现意外情况。

如果需要更多位,则将 1 替换为所需的位数。例如:

struct Date
{
    unsigned int Year : 13; // 2^13 = 8192, enough for "year" representation for long time
    unsigned int Month: 4;  // 2^4 = 16, enough to represent 1-12 month values.
    unsigned int Day:   5;  // 32
};

整个结构只使用 22 位,并且通过正常的编译器设置,sizeof 这个结构将是 4 个字节。

用法非常简单。只需声明变量,并像普通结构一样使用它。

Date d;

d.Year = 2016;
d.Month = 7;
d.Day =  22;

std::cout << "Year:" << d.Year << std::endl <<
        "Month:" << d.Month << std::endl <<
        "Day:" << d.Day << std::endl;