关于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