C++位域

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

位域有以下特点:

  • 位域的类型必须是整型或者枚举类型,因为带符号位域的行为是由具体实现确定的,所以我们通常使用无符号类型保存一个位域。
  • 取地址操作符&不能应用在位域字段上。
  • 位域字段不能是类的静态成员。
  • 位域字段在内存中的位置是按照从低位向高位的顺序放置的。
  • 位域定义中的数据类型如果是有符号的,那么其位数就不能少于两位(因为其中一个是符号位)。
  • 位域字段位数不能超过类型的最大位数。
//“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;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值