在类和结构体中可以将其(非静态)数据成员定义为位域(bit-field),在一个位域中含有一定数量的二进制位。当一个程序需要向其他程序或硬件设备传递二进制数据时,通常会用到位域。
位域定义:
int val_name : 位域长度
int main() {
struct
{
unsigned int val : 2; // val 占 2位二进制位
unsigned int age : 3; // age 占 3位二进制位
} MyStruct;
MyStruct.val = 2;
printf("%d\n", MyStruct.val); // 2
MyStruct.val = 5;
printf("%d\n", MyStruct.val); // 1,溢出的数据被舍弃
MyStruct.age = 9;
printf("%d\n", MyStruct.age); // 1,溢出的数据被舍弃
system("pause");
return 0;
}
(1)位域在内存中的布局是与机器有关的
(2)位域的类型必须是整型或枚举类型,带符号类型中的位域的行为将因具体实现而定
(3)取地址运算符(&)不能作用于位域,任何指针都无法指向类的位域