设为首页 加入收藏

TOP

2.12.6 位域
2013-10-12 09:00:56 来源: 作者: 【 】 浏览:119
Tags:2.12.6位域

2.12.6 位域

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

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

  1. struct 位域结构名  
  2. {  
  3. 类型说明符位域名1: 位域长度;  
  4. 类型说明符位域名2: 位域长度;  
  5. ……  
  6. 类型说明符位域名n: 位域长度;  
  7. }; 

为了节省内存空间,可以把几个数据压缩到少数的几个类型空间中,比如需要表示两个3 位的二进制数和一个2 位的二进制数,则可以用一个8 位的字符表示。如下所示定义一个8位的位域:

  1. struct  
  2. {  
  3. char a : 3;  
  4. char b : 3;  
  5. char c : 2;  
  6. }; 

可以看到,这个结构体所占空间为一个字节(8位),节省了内存空间。

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

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

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

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


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇2.13.1 宏定义 下一篇3.1.4 vi 的底行模式

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: