C语言复习之位段
1.位段的声明和结构类似,但它的成员是一个或多个位的字段。这些不同长度的字段实际上存储于一个或多个整型变量中。
2.位段的声明和任何普通的结构成员声明相同,但有两个例外。
1>位段成员必须声明为int,singed int 或unsigned int类型。
2>其次,在成员名的后面是一个冒号和一个整数,这个整数指定该位段所占用的位的数目。
eg:
struct CHAR {
unsigned int ch : 7;
unsigned int font :6;
unsigned int size :19;
};
struct CHAR ch1
说明:
² 用signed或unsigned整数显示地声明位段是个好方法。如果位段声明为int类型,它究竟被解释为有符号数还是无符号数是由编译器决定的。
² 注重可移植性的程序应该避免使用位段。由于下面这些与实现有关的依赖性,位段在不同的系统中可能有不同的结果。
1>int位段被当作有符号数还是无符号数
2>位段中位的最大数目。许多编译器把位段成员的长度限制在一个整型值的长度之内,所以一个能够运行于32位整数的机器上的位段声明可能在16位整数的机器上无法运行。
3>位段中的成员在内存中是从左向右分配还是从右向左分配
4>当一个声明指定了两个位段,第2个位段比较大,无法容纳于第1个位段剩余的位时,编译器有可能把第2个位段放在内存的下一个字,也可能直接放在第1个位段后面,从而在内存位置的边界上形成重叠。
二.位段的好处
1.它能够把长度为奇数的数据包包装在一起,节省存储空间2.另一个使用位段的理由是由于它们可以很方便地访问一个整型值的部分内容。
说明:
使用位段只是基于方便的目的。任何可以用位段实现的任务都可以使用移位和屏蔽来实现(既用位操作符:| ,&, ~)。