c语言构造体位域(转)

来源:互联网 发布:久米田康治 知乎 编辑:程序博客网 时间:2024/04/28 08:40
有些消息在存储时,并无须要挪借一个全面的字节, 而只需占几个或一个二进制位。例如在储藏一个开关量时,只有0和1 两种事态,用一位二进位即可。为了勤俭存储空间,并使处理轻便,C语言又供给了一种数据构造,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几个不同的区域,并解释每个区域的位数。每个域有一个域名,批准在过程中按域名举行垄断。这么就能够把几个不同的对象用一个字节的二进制位域来表示。一、位域的定义和位域变量的解释位域定义与构造定义雷同,其形式为:

  struct 位域构造名

  { 位域列表 };

  其中位域列表的形式为: 种类解释符 位域名:位域长度

  例如:

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

  位域变量的解释与构造变量解释的措施雷同。 可批准先定义后解释,同时定***释可能直接解释这三种措施。例如:

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

  解释data为bs变量,共占两个字节。其中位域a占8位,位域b占2位,位域c占6位。对于位域的定义尚有以下几点解释:

  1.一个位域定然存储在统一个字节中,不能跨两个字节。如一个字节所剩空间不够储藏另一位域时,应从下一单元起储藏该位域。也能够存心使某位域从下一单元开始。例如:

struct bs
{
 unsigned a:4
 unsigned :0
 unsigned b:4
 unsigned c:4
}

  在这个位域定义中,a占第一字节的4位,后4位填0表示不利用,b从第二字节开始,挪借4位,c挪借4位。

  2. 由于位域不批准跨两个字节,因而位域的长度不能大于一个字节的长度,也即便说不能超过8位二进位。

  3. 位域能够无位域名,这时它只用来作添补或调剂位置。无名的位域是不能利用的。例如:

struct k
{
 int a:1
 int :2
 int b:3
 int c:2
};

  从以上分析能够看出,位域在性质上即便一种构造种类, 不过其成员是按二进位分配的。

  二、位域的利用

  位域的利用和构造成员的利用雷同,其等闲形式为: 位域变量名·位域名位域批准用各种款式输出。

main(){
 struct bs
 {
  unsigned a:1;
  unsigned b:3;
  unsigned c:4;
 } bit,*pbit;
 bit.a=1;
 bit.b=7;
 bit.c=15;
 printf( "%d,%d,%d/n ",bit.a,bit.b,bit.c);
 pbit=&bit;
 pbit-> a=0;
 pbit-> b&=3;
 pbit-> c|=1;
 printf( "%d,%d,%d/n ",pbit->a,pbit-> b,pbit-> c);
}

  上例过程中定义了位域构造bs,三个位域为a,jae连接器b,c。解释了bs种类的变量bit和指向bs种类的指针变量pbit。这表示位域也是能够利用指针的。

  过程的9、10、11三行离别给三个位域赋值。(应当心赋值不能超过该位域的批准范围)过程第12行以整型量款式输出三个域的内容。第13行把位域变量bit的地址送给指针变量pbit。第14行用指针措施给位域a重新赋值,赋为0。第15行利用了复合的位计算符"&= ", 该行相当于: pbit->b=pbit->b&3位域b中原有值为7,与3作按位与计算的收获为3(111&011=011,十进制值为3)。同样,过程第16行中利用了复合位计算"|= ", 相当于: pbit-> c=pbit->c|1其收获为15。过程第17行用指针措施输出了这三个域的值。


copy from : http://blog.sina.com.cn/s/blog_69b3fe130100v9b5.html


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 桐乡世贸二期怎么办 失业金汇到保险金账户怎么办 氧气罐阀门漏气怎么办 小微餐饮证怎么办 打网球手腕疼怎么办 晚上睡觉饿了怎么办 孕妇凌晨饿了怎么办 减肥想吃泡面怎么办 自考的实践考核怎么办 c1本怎么办从业资格证 办理资格证假的怎么办 高一学习差怎么办 职业资格证书理论考试不合格怎么办 职称证查不到怎么办 社保与工资不符怎么办 社保审计不过关怎么办 企安宝登录不上怎么办 苹果维修没发票怎么办 园林绿化资质取消后怎么办 出租车从业资格证到期怎么办 养老金认证身份证不符怎么办 硬盘指示灯不亮怎么办 做业务产品质量很差怎么办 没有户籍证明了怎么办 回执编号忘了怎么办 泳镜里面花了怎么办 网页打印预览空白怎么办 中专毕业证掉了怎么办 会计证年检忘了怎么办 会计准考证丢了怎么办 从业资格证没带怎么办 安全证过期了怎么办 安全员证掉了怎么办 局部抗浮不满足怎么办 职称代评被骗怎么办 租到了公租房怎么办 公租房不住了怎么办 公寓不退押金怎么办 找物业租房被骗怎么办 租房子被骗了怎么办 公租房怎么办入住手续