c语言之位域

什么是位域

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

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

典型的实例

        用 1 位二进位存放一个开关量时,只有 0 和 1 两种状态。

        读取外部文件格式——可以读取非标准的文件格式。例如:9 位的整数。

位域的定义

位域定义与结构定义相仿,其形式为:

struct 位域结构名
{
 type [member_name] : width ;   //位域列表
};

type:只能为 int、unsigned int、signed int三种类型。

member_name:位域的名称。

width:位域中位的数量。宽度必须小于或等于指定类型的位宽度。

位域示例

        位域可以存储多于 1 位的数,例如,需要一个变量来存储从 0 到 7 的值,您可以定义一个宽度为 3 位的位域,如下:

示例1

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

data 为 bs 变量,共占两个字节。其中位域 a 占 8 位,位域 b 占 2 位,位域 c 占 6 位。

示例2

typedef enum  STdef
{
    NO=0,
    YES=1
}STdef;

typedef union 
{
    u8 BYTE;
    struct
    {
        STdef SV14:1;
        STdef SV23:1;
        STdef SV24:1;
    }BIT;
}LEAK_ST_DEF;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值