位结构

转自:http://blog.chinaunix.net/u/17030/showart_101273.html

一、概念 

位结构是一种特殊的结构, 在需按位访问一个字节或字的多个位时, 位结构比按位运算符更加方便。

    位结构定义的一般形式为:

     struct位结构名{

          数据类型 变量名: 整型常数;

          数据类型 变量名: 整型常数;

     } 位结构变量;

其中:

数据类型必须是int(unsignedsigned) 整型常数必须是非负的整数, 范围是0~32, 表示二进制位的个数, 即表示有多少位。

    变量名是选择项, 可以不命名, 这样规定是为了排列需要。

    例如: 下面定义了一个位结构。

     struct{

          unsigned incon: 8;  /*incon占用低字节的0~78*/

          unsigned txcolor: 4;/*txcolor占用高字节的0~3位共4*/

          unsigned bgcolor: 3;/*bgcolor占用高字节的4~6位共3*/

          unsigned blink: 1;  /*blink占用高字节的第7*/

     }ch;

    位结构成员的访问与结构成员的访问相同。

    例如: 访问上例位结构中的bgcolor成员可写成:

      ch.bgcolor

二、注意事项

    1. 位结构中的成员可以定义为unsigned, 也可定义为signed,  但当成员长度为1, 会被认为是unsigned类型。因为单个位不可能具有符号。

    2. 位结构中的成员不能使用数组和指针, 但位结构变量可以是数组和指针,如果是指针, 其成员访问方式同结构指针。

    3. 位结构总长度(位数), 是各个位成员定义的位数之和,  可以超过两个字节。

    4. 位结构成员可以与其它结构成员一起使用。

    例如:

     struct info{

          char name[8];

          int age;

          struct addr address;

          float pay;

          unsigned state: 1;

          unsigned pay: 1;

          }workers;

   上例的结构定义了关于一个工人的信息。其中有两个位结构成员, 每个位结构成员只有一位, 因此只占一个字节但保存了两个信息, 该字节中第一位表示工人的状态, 第二位表示工资是否已发放。由此可见使用位结构可以节省存贮空间。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章