首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于C语言中位段有关问题,小弟求解

2012-03-31 
关于C语言中位段问题,小弟求解!例如:struct bytedata{unsigned a:2/*位段a,占2位*/unsigned:6/*无名位段

关于C语言中位段问题,小弟求解!
例如:
struct bytedata
{unsigned a:2; /*位段a,占2位*/
 unsigned:6; /*无名位段,占6位,但不能访问*/
 unsigned:0; /*无名位段,占0位,表下一位段从下一字边界开始*/
 unsigned b:10; /*位段b,占10位*/
 int i; /*成员i,从下一字边界开始*/
}data;
位段数据的引用:
同结构体成员中的数据引用一样,但应注意位段的最大取值范围不要超出二进制位数定的范围,否则超出部分会丢弃。
例如:data.a=2; 但 data.a=10;就超出范围(a占2位,最大3)//求解释下a为什么最大为3 ?还有data.a=10中10是指10位还是什么?

[解决办法]
因为a只有两位……可能值是(二进制表示): 00 01 10 11,即十进制的0、1、2、3……
data.a = 10表示将十进制的10赋值给data.a,但是因为超范所以截取最低两位,因此data.a = 2

热点排行