C++位域

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiongya8888/article/details/89304275

类可以将其数据成员定义成位域,在一个位域中有一定数量的二进制位。位域的声明形式是在成员名字后紧跟一个冒号以及一个常量表达式,该表达式用于指定成员所占的二进制位数。位域可以节省内存资源,使数据结构更紧凑。

位域有以下特点:

  • 位域的类型必须是整形或者枚举类型,因为带符号位域的行为是由具体实现确定的,所以我们通常使用无符号类型保存一个位域。
  • 取地址操作符&不能应用在位域字段上。
  • 位域字段不能是类的静态成员。
  • 位域字段在内存中的位置是按照从低位向高位的顺序放置的。
  • 位域定义中的数据类型如果是有符号的,那么其位数就不能少于两位(因为其中一个是符号位)。
  • 位域字段位数不能超过类型的最大位数。
//“Date::nWeekDay”: 位域类型对位数太小
struct Date
{
	unsigned int nWeekDay : 33;
};
  • 未命名的位域字段可以起到填充作用,位数为 0 时则起到强制对齐的效果。
struct Date 
{
   unsigned int nWeekDay  : 3;    // 0..7   (3 bits)
   unsigned int nMonthDay : 6;    // 0..31  (6 bits)
   unsigned int          : 0;    // Force alignment to next boundary.
   unsigned int nMonth    : 5;    // 0..12  (5 bits)
   unsigned int nYear     : 8;    // 0..100 (8 bits)
};

int main()
{
 
	Date date = {0};
	date.nMonth = 10;
	date.nYear |= 100;
	system("pause");
	return 0;
}

猜你喜欢

转载自blog.csdn.net/xiongya8888/article/details/89304275