黑马程序员技术交流社区
标题:
位段(位域)
[打印本页]
作者:
wangshengjie
时间:
2015-3-12 09:17
标题:
位段(位域)
本帖最后由 Micro 于 2015-3-17 14:38 编辑
/*
位段:(向一个字节中的一个或几个二进制位赋值或改变它的值)
1、定义:C语言允许在一个结构体中以位为单位来指定其成员所占内存长度,
这种以位为单位的成员称为"位段"或"位域"(bit file)。
例如:struct packed_data
{
unsigned a:2;
unsigned b:6;
unsigned c:4;
unsigned d:4;
int i;
}data;
*位段中数据的引用方法:data.a=2;data.b=7;data.c=9;
*注意位段允许的最大值范围:例如 data.a占2位,最大值为3;data.b占6位,最大值为63;
2、说明:
(1)利用位段能够用较少的位数存储数据;
(2)位段成员变量必须指定为unsigned或int类型;
(3)若某一位段要从另一个字开始存放,可以用以下形式定义:
unsigned a:1;
unsigned b:2;(a、b存储在一个存储单元)
unsigned :0;//其作用是使下一个位段从下一个存储单元开始存放。
unsigned c:3;(c存储在另一个存储单元)
(4)一个位段必须存储在同一存储单元中,不能跨两个单元。若第一个单元空间不能容纳下一个位段,
则该空间不用,而从下一个单元起存放该位段。
(5)可以定义无名位段;
unsigned a:1;
unsigned :2;(这两位空间不用)
unsigned b:3;
unsigned c:4;
(6)位段的长度不能大于存储单元的长度,也不能定义位段数组;
(7)位段可以用整型格式符输出,也可以用%u、%o、%x等格式符输出;
例如:printf("%d,%d,%d",data.a,data.b,data.c);
(8)位段可以在数值表达式中引用,它会被系统自动的转换成整型数。
例如:data.a+5/data.b 是合法的;
*/
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2