《C专家编程》学习笔记--位段结构
2012-07-30 01:22
267 查看
位段以位为单位定义结构体(或共用体)中成员所占存储空间的长度。结构中也允许存在位段、无名字段以及字对齐所需的填充字段。通过在字段的生命后面加一个冒号以及一个表示字段位长的整数来实现。
含有位段的结构体类型称为位段结构。位段结构也是一种结构体类型,只不过其中含有以位为单位定义存储长度的整数类型位段成员。采用位段结构既节省存储空间,又可方便操作。
位段结构中位段的定义格式为:
unsigned <成员名>:<二进制位数>
e.g.
/* 处理ID信息 */
struct pid_tag {
unsigned int inactive : 1;
unsigned int : 1; /* 1个位的填充 */
unsigned int refcount : 6;
unsigned int : 0; /* 填充到下一个字边界 */
short pid_id;
struct pid_tag *link;
};
位段数据的引用:
同结构体成员中的数据引用一样,但应注意位段的最大取值范围不要超出二进制位数定的范围,否则超出部分会丢弃。
例如:data.a=2; 但 data.a=10;就超出范围(a占2位,最大3)
关于位段数据,注意以下几点:
(1)一个位段必须存储在同一存储单元(即字)之中,不能跨两个单元。如果其单元空间不够,则剩余空间不用,从下一个单元起存放该位段。
(2)可以通过定义长度为0的位段的方式使下一位段从下一存储单元开始。
(3)可以定义无名位段。
(4)位段的长度不能大于存储单元的长度。
(5)位段无地址,不能对位段进行取地址运算。
(6)位段可以以%d,%o,%x格式输出。
(7)位段若出现在表达式中,将被系统自动转换成整数。
含有位段的结构体类型称为位段结构。位段结构也是一种结构体类型,只不过其中含有以位为单位定义存储长度的整数类型位段成员。采用位段结构既节省存储空间,又可方便操作。
位段结构中位段的定义格式为:
unsigned <成员名>:<二进制位数>
e.g.
/* 处理ID信息 */
struct pid_tag {
unsigned int inactive : 1;
unsigned int : 1; /* 1个位的填充 */
unsigned int refcount : 6;
unsigned int : 0; /* 填充到下一个字边界 */
short pid_id;
struct pid_tag *link;
};
位段数据的引用:
同结构体成员中的数据引用一样,但应注意位段的最大取值范围不要超出二进制位数定的范围,否则超出部分会丢弃。
例如:data.a=2; 但 data.a=10;就超出范围(a占2位,最大3)
关于位段数据,注意以下几点:
(1)一个位段必须存储在同一存储单元(即字)之中,不能跨两个单元。如果其单元空间不够,则剩余空间不用,从下一个单元起存放该位段。
(2)可以通过定义长度为0的位段的方式使下一位段从下一存储单元开始。
(3)可以定义无名位段。
(4)位段的长度不能大于存储单元的长度。
(5)位段无地址,不能对位段进行取地址运算。
(6)位段可以以%d,%o,%x格式输出。
(7)位段若出现在表达式中,将被系统自动转换成整数。
相关文章推荐
- 《深入理解java虚拟机》学习笔记1——Java内存结构
- 「学习笔记——Python」Python 常用数据结构
- 《Windows via C/C++》学习笔记 —— 线程的CONTEXT结构
- 《C专家编程》学习笔记(运动的诗章:运行时的数据结构)
- 学习笔记之数据结构与算法(一)
- 《C++ primer》学习笔记之十七:查看vc的c++标准库的结构
- Windows NT FileSystem Internals》学习笔记之IO_STACK_LOCATION的结构
- 《深入理解java虚拟机》学习笔记1——Java内存结构
- 《C专家编程》学习笔记(对链接的思考)
- 《C专家编程》学习笔记(对内存的思考)
- 《深入理解java虚拟机》学习笔记1——Java内存结构
- 《深入理解java虚拟机》学习笔记5——Java Class类文件结构
- 《Spring技术内幕》学习笔记1——IoC容器体系结构
- 学习笔记(三)——ls命令、Linux目录结构、cd命令、PATH、快捷键
- 《C专家编程》学习笔记(C:穿越时空的迷雾)
- 《Inside Microsoft IL Assembler》学习笔记4:.net中PE文件的结构
- 《C专家编程》学习笔记——再论数组
- linux下python学习笔记(十一)数据结构1
- C语言精华记录——陆(结构、联合、位段、位级操作)
- 《c专家编程》学习笔记(一)