位域内存中存储形式

有些信息在存储时,并不需要占用一个完整的字节,而只需要一个或几个二进制位即可;比如:在存放一个开关量时,只有0和1两种状态,只需要使用一个二进制位即可存储;为了节省存储空间,C语言提供了一种数据结构,称为”位域”或”位段”;所谓”位域”就是把一个字节中的8个二进制位划分为几个不同的区域,并说明每个区域的二进制位数;每一个位域都有一个位域名,允许程序员在程序中按照位域名进行访问;这样就可以把几个不同的对象用一个字节的二进制位域来表示

1. 定义

1、位域的定义与结构体的定义相仿;格式如下:
struct 位域结构名
{
类型说明符1 位域名1:位域长度1; //最低位;
类型说明符2 位域名2:位域长度2; //次低位;
类型说明符3 位域名3:位域长度3;
……
类型说明符N 位域名N:位域长度M; //最高位;其中,N∈[0,1,2…..],M∈[0,8];
};

## 2. 位域变量的说明与结构体变量的说明方式相同;可采用三种方式:先定义后说明、同时定义说明、直接说明;例如:

   struct BitField
   {
     int a:8;
     int b:2;
     int c:6;
   } data;

说明位域变量data,共占用2个字节;其中,位域a占8bit,位域b占2bit,位域c占6bit

3、位域变量的使用与结构体变量的使用方法相同,有两种形式:

变量: 位域变量名.位域名
指针: 位域指针名->位域名

4. 例子:

struct BitField
{
    unsigned char a:2;  //最低位;
    unsigned char b:3;
    unsigned char c:3;  //最高位;
}bf;
bf.a=2;//10
bf.b=4;//100
bf.c=3;//011

输出:
011 100 10

位域中的位域字段按照从低位向高位顺序方式的顺序来看,那么,a、b、c这三个位域字段在内存中的放置情况是:
最高位是c:011,中间位是b:100,最低位是a:10;所以,这个位域结构中的8二进制内容就是: 01110010,总共8个位.

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值