【2018-04-10】C语言位段简单笔记 [历史归档]本文原发布于 cstriker1407.info 个人博客内容为历史存档仅供参考。发布时间2018-04-10 标题C语言位段简单笔记分类编程 标签CCC语言位域简单笔记参考链接《 https://www.cnblogs.com/balingybj/p/4780358.html 》参考链接《 http://www.cnblogs.com/dolphin0520/archive/2011/10/14/2212590.html 》位域/位段(bit-field)是以位为单位来定义结构体(或联合体)中的成员变量所占的空间。含有位域的结构体(联合体)称为位域结构。采用位域结构既能够节省空间又方便于操作。位段的定义格式为:type : digits其中type只能为intunsigned intsigned int三种类型(int型能不能表示负数视编译器而定比如VC中int就默认是signed int能够表示负数)。位段名称var是可选参数即可以省略。digits表示该位段所占的二进制位数。那么定义一个位域结构可以像下面这段代码去定义struct node{unsigned int a:4; //位段a占4位unsigned int :0; //无名位段占0位unsigned int b:4; //位段b占4位int c:32; //位段c占32位int :6; //无名位段占6位};使用位段需注意一下几点:位段的类型只能是intunsigned intsigned int三种类型不能是char型或者浮点型位段占的二进制位数不能超过该基本类型所能表示的最大位数比如在VC中int是占4个字节那么最多只能是32位无名位段不能被访问但是会占据空间不能对位段进行取地址操作若位段占的二进制位数为0则这个位段必须是无名位段下一个位段从下一个位段存储单元开始存放若位段出现在表达式中则会自动进行整型升级自动转换为int型或者unsigned int。对位段赋值时最好不要超过位段所能表示的最大范围否则可能会造成意想不到的结果。位段不能出现数组的形式。对于位段结构编译器会自动进行存储空间的优化主要有这几条原则:9. 如果一个位段存储单元能够存储得下位段结构中的所有成员那么位段结构中的所有成员只能放在一个位段存储单元中不能放在两个位段存储单元中如果一个位段存储单元不能容纳下位段结构中的所有成员那么从剩余的位段从下一个位段存储单元开始存放。(在VC中位段存储单元的大小是4字节).10. 如果一个位段结构中只有一个占有0位的无名位段则只占1或0字节的空间(C语言中是占0字节而C中占1字节)否则其他任何情况下一个位段结构所占的空间至少是一个位段存储单元的大小11.