黑马程序员技术交流社区

标题: 位段(位域) [打印本页]

作者: 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