【C语言】位域(位段、位字段)

位域(bit-field) 是一种特殊的结构体成员,在结构体定义时,我们可以指定某个成员变量所占用的二进制位数(Bit)。


什么是位域?

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

位域声明

位域的定义与结构体相仿:

struct 结构名 {
   
	//位域列表
	type member_name : width;  //width位宽:位域中位的数量
	...
};

:后的数字用来限定成员变量占用的位数,带有与定义宽度的变量称为位域。看下面的例子:

struct bs {
   
    unsigned m;
    unsigned int n : 5;
    unsigned char ch : 6;
};

成员m没有限制,根据数据类型即可推算出它占用4个字节(Byte)的内存。成员 nch被位宽限制,不能再根据数据类型计算长度,它们分别占用 5、6 位(Bit)的内存。
nch的取值范围非常有限,数据稍微大些就会发生溢出:

int main(void) {
   
	//赋值
	struct bs {
   
 		unsigned m;
        unsigned int n : 5;
        unsigned char ch : 6;
    } data = {
   0xad, 0xe, '$'};
        
    //第一次输出
    printf(<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值