位域

一、位域的定义

        位域是把一个字节中的二进制位划分为几个不同的区域,并说明每个区域的位数。每个区域都有一个域名,允许

        在程序中按域名进行操作。这样就可以把几个不同的对象用一个字节的二进制位来表示。

        形式:

                struct  位域结构名

                {

                       类型说明符  位域名:位域长度;

                       类型说明符  位域名:位域长度;

                       . . . . . .  

                };

        例如:

                struct  data

                {

                        unsigned int a :  2 ;

                        unsigned int b : 3 ;

                        unsigned int c : 3 ;

                } ;

        注意:

            (1)位域必须存储在同一个字节中,不能跨两个字节。

                例如:

                        

                      struct  data

                      {

                            unsigned int a :  2 ;

                            unsigned int b : 4;

                            unsigned int c : 3 ;

                     } ;

                    这种情况是不允许的。

                    当一个字节所剩的空间不足以存放另一个位域时,应当从下一个字节起存放该位域。

                 解决方案:         

                          struct  data

                          {

                               unsigned int a :  2 ;

                               unsigned int b : 4 ;

                               unsigned int : 0 ;   //空域

                               unsigned int c : 3;

                        } ;

                        a占用第一个字节的2位,b占用第一个字节的4位,第一个字节剩下的2位用0填充,表示不用。

                        c会从第二个字节开始存储。

               (2)位域所占的位数不能超过8个二进制位

               (3)允许位域无域名

                            无域名的位域是不能使用的。

二、位域变量的声明

           (1)先定义位域类型,再定义变量

                    struct  位域结构名

                    {

                            类型说明符 位域名:位域长度;

                            . . . . . . 

                    };

                    struct 位域结构名  变量名;

           (2)在定义位域类型的同时,定义变量

                    struct  位域结构名

                    {

                            类型说明符  位域名:位域长度;

                            . . . . . . 

                    }变量名;

           (3)直接定义位域类型的变量 

                    struct  

                    {

                        类型说明符  位域名:位域长度;

                        . . . . . .

                    }变量名;

                由于位域没有位域结构名,所以在程序的其他地方不能继续声明变量。通常用于函数内部。

三、位域变量的使用

        形式:

                位域变量名 . 位域名;

        大部分的位域程序,都有位运算。



猜你喜欢

转载自blog.csdn.net/m0_37671794/article/details/80371738