位域

   有些信息在存储时,并不需要占用一个完整的字节,而只需占用几个或一个二进制位。如在存放一个开关量时,只有0和1两种状态,用1位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为”位域“。

   所谓”位域“,就是把一个字节中的二进制位划分为几个不同的区域,并说明每个区域的位数,每个域都有一个域名,允许在程序中按域名进行操作。这样就可以把几个不同的对象用一个字节的二进制位域来表示。位域的定义和位域变量的定义形式为:

  struct 位域结构名

 {

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

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

   ......

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

 };

比如:需要表示两个3位的二进制数和一个2位的二进制数,则可以用一个8位的字符表示,如下:

struct

   char a:3;

   char b:3;

   char c:2;

};

可以看到这个结构体所占用的空间位一个字节(8位),节省了空间,

位域的说明与结构变量说明的方式相同,可以采用先定义后说明、同时定义说明或者直接说明这3种方式。使用位域时应注意:

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

2.位域的长度不能大于一个字节的长度,也就是说不能超过8位。

3.可以定义无名位域,这时它只能用来做填充或调整位置,无名位域在程序中是不能使用的。

posted on 2018-09-16 11:28  放空飞翔  阅读(679)  评论(0编辑  收藏  举报

导航