c语言之位域 -- 减少变量空间的有效利器

问题引入:  
       存在一个问题,如果只给你一个字节的空间,但是程序中却有两个变量需要存储,但是变量的大小都在10以内,这个问题该如何解决呢? 首先想到的就是按位操作,将一个字节分为前四个字节和后四个字节,分别存放2个变量,但是这样的按位操作比较麻烦,所以这里介绍一下位域,可以比较简单的解决这个问题。


首先简单介绍一下c语言之位域:
     位域是指信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。 当我们在存储数据时,如果这个数据不满一个或者几个字节,我们可以采用位域对其进行分配空间。


位域的使用方法如下:
       当我们要建立一个2个变量,每个只占用4bit的时候,我们可以采用如下方法:
          struct {
              unsigned char  a:4;
              unsigned char  b:4;
          } test;
       这样,a、b两个变量便可以每个占用4bit,sizeof(test)= 1,符合上面的问题要求,同时,a、b按照结构体的要求操作便可以,比较方便。

那我们该如何建立这样的位域呢?经过VC编程,我总结出如下规律:

1、位域的分配一定要按照所用变量的顺序来,用满再换,比如   char a:4  int b:4  char c:4  是不对的,这样分配两个char的四位是不会分配到一起。
2、位域的分配一定要找到符合大小的变量,比如  int a:4   int b:4 ,这样分配后就会占用 4个字节,而你只需要2个字节而已,所以用位域的时候最好分配满。
3、位域的分配符合windows的内存操作要求,及要按照4个字节对其。

下面我给几个在VC的程序的例子便可以清晰明了了:
    struct 
   {
       int a:4;
       int d:4;    //sizeof  =  4; 
   }testW;

    struct 
   {
        int a:4;
        int d:4;    //sizeof  =  8;  存在windows对其
       char c:4;
   }testW;

    struct 
    {
          char a:4;
          char d:4;    //sizeof  =  1;  
     }testW;

    struct 
    {
         char a:4;
             int c:4;
          char d:4;    //sizeof  =  12;  
   }testW;

这样大家应该比较清晰如何使用位域了吧,如果有任何问题,可以私信我。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值