类可以将其(非静态)数据成员定义成位域,在一个位域中含有一定数量的二进制位。当一个程序需要向其他程序或硬件设备传递二进制数据时,通常会用到位域+。
// 位域的类型必须是整型或枚举类型。// 因为带符号位域的行为是由具体实现确定的,所以在通常情况下我们使用无符号类型保存一个位域。typedef unsigned int Bit;class File {Bit mode:2; // mode占2位Bit modified:1; // modified占1位Bit prot_owner:3; // prot_owner占3位Bit prot_group:3; // prot_group占3位Bit protworld:3; // prot_world占3住// 位域在内存中的布局与机器相关// 这五个连续的位域可能压缩在一个unsigned int中// 是否能压缩到一个整数中以及如何压缩是与机器相关的。// File的操作和数据成员public:enum modes{ // 文件类型以八进制的形式表示READ = 01,WRITE = 02,EXECUTE = 03};File &open(modes);void close();void write();bool isRead() const;void setWrite();};void File::write(){modified = 1;}void File::close(){if (modified)......}// 通常使用内置的位运算符操作超过1位的位域File &File::open(File::modes m)mode |= READ; // 按默认方式设置READ......if (m & WRITE) // 如果打开了READ和WRITE...... // 按照读/写方式打开文件return *this ;}// 如果一个类定义了位域成员,则它通常也会定义一组内联的成员函数以检验或设置位域的值inline bool File::isRead() const{return mode & READ;}inline void File::setWrite() {mode |= WRITE;}
举个实际例子(磁盘寄存器),下面是一个磁盘寄存器的定义。

