#2020学习打卡##C程序设计语言# C语言位字段的含义和用途

存储空间很宝贵的情况下,可以考虑利用C语言位字段将多个数据保存在一个机器字。机器字指计算机一次能处理数据的bit位数,一般所说的32位系统即指其机器字长为32bit。
 
1.定义位字段:C语言位字段定义方法:
 struct  {
unsigned int a : 1; //冒号“:”后的数字为该位字段所占的bit位数
unsigned int b : 3;
unsigned int c : 5;
}flags;
上面定义了一个flags变量,包含a,b,c三个位字段。位字段只能定义为以下3中类型:

                      1.int 
                      2.signed int
                      3.unsigned int 
 需要提醒的是,位字段的赋值要特别小心范围,如unsigned int型flags.b只占3个位数,范围在000-111即0-7,超出范围会出现不可预知错误。

   2.位字段访问:
                      1.位字段通过“.”号访问:flags.a  ,  flags.b等等。
                      2.位字段没有独立的地址,不能进行取址操作。
                      3.位字段没有独立的存储空间,不能进行sizeof()操作。

  3.内存分配规则:
                      1.位字段按声明顺序在机器字内存储
                      2.位字段不能跨越机器字存储,上一个机器字空间不足时,该位字段将全部存到下一个机器字
 

  4.无名字段与0字段:                   
 struct  {
unsigned int a : 1;
unsigned int : 3; //无名字段,不可访问,仅起占位作用
unsigned int : 0; //0字段,下一个位字段在新机器字边界
unsigned int b : 7;
}flags;

  受0字段作用, 位字段flags.b将在下一个机器字边界开始存储。
 

0 个评论

要回复文章请先登录注册