Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2315144
  • 博文数量: 527
  • 博客积分: 10343
  • 博客等级: 上将
  • 技术积分: 5565
  • 用 户 组: 普通用户
  • 注册时间: 2005-07-26 23:05
文章分类

全部博文(527)

文章存档

2014年(4)

2012年(13)

2011年(19)

2010年(91)

2009年(136)

2008年(142)

2007年(80)

2006年(29)

2005年(13)

我的朋友

分类: C/C++

2010-06-21 18:09:49

C99中只说到bit field的类型为Bool 和 int(及unsigned int).
但gcc及VC中都可以用char, short来定义其类型, gcc的warning会对使用Bool和int之外的类型时报告警告:

warning: type of bit-field '' is a GCC extension

  • 可以有unmaed bit-field, 这是标准C允许的, 目的是允许定义一些padding来迎合特定的布局.
  • 可以有宽度为0的field, 明确的语意是结束对当前存储单元的使用, 让下一个bit field成员使用一个崭新的存储单元
  • 如 struct A{ unsigned int a1: 7;  unsigned int a2: 2; }; 这种情况, a1占用第一个字节中的7个bit, 只剩下一个bit, 对于a2的分配, 可以直接跳过这一个bit不用, 使用下一个存储单元(字节), 也可以使用上一个字节中的一个bit, 再用下一个存储单元中的一个bit来凑齐, 具体选择是由实现定义的.
  • bit的使用顺序, 是最高位在前, 还是反之, 也是由实现定义的.
  • 在bit field定义中, 只写int 等于只写char, 其是signed还是unsigned也是实现定义的, 所以在bit-field中应该总是写明signed int, unsigned int.
阅读(1802) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~