1. 位运算总结
2. 位段
在数据通信领域,控制信息往往只占一个字节中的一个或几个二进制位,常常在一个字节中存放几个信息。
c语言允许在一个结构体中以位为单位来指定其成员所占内存长度,这种以位为单位的成员称为“位段”或“位域”。
尤其要注意各位段的引用范围
【注】1字节=8位
1.位段举例
struct packed_data
{ // 尤其要注意各位段的引用范围
unsigned a:2; //data.a允许的最大值:(0011)2=(3)10
unsigned b:3 //data.b允许的最大值:(0111)2=(7)10
unsigned c:4; //data.c允许的最大值:(1111)2=(15)10
int i; //a,b,c共占9位,大于1字节,i从另一字节开头起存放
};
struct packed_data data; //各位可以不恰好占满一个字节
2.说明
1.位段成员的类型必须指定为unsigned或者int类型
2.若某一位段要从另一个字开始存放,可用下面的定义式
unsigned a:1; // 一个
unsigned b:2; // 存储单元
unsigned :0; //---------------
unsigned c:3; // (另一存储单元)
3.如果一个单元空间不能容纳下一个位段,则跳过该单元剩余空间,从下一单元起存放该位段
4.定义无名位段是合法的,但无名位段无法使用
5.位段长度应小于存储单元长度,定义位段数组是非法的
6.可以用%d %o %u %x
等输出位段
7.位段可以在数值表达式中被引用,届时会被系统自动转换为整型数