C语言 ——— 位段(位域)

目录

什么是位段

位段的内存分配


什么是位段

位段的声明和结构体是类似的

但有两个不同:

1. 位段的成员必须是整型家族: int(整型) ,unsigend int (无符号整型),sigend int(有符号整型), char(字符类型)

2. 位段的成员名后有一个冒号和数字

代码演示:

struct S
{
	int _a : 2;
	int _b : 5;
	int _c : 10;
	int _d : 20;
};

S 就是一个位段类型


位段的内存分配

了解位段的意义:

当一个结构体变量只用表示出 1 ,2 ,3 时,就不用开辟那么多的空间,这时这个变量就可以使用位段来控制开辟的空间大小

了解位段分配规则:

位段在空间上是按照每次开辟 4 个字节或者 1 个字节的方式开辟的,当超出 4 个字节或者 1个字节时,就会追加 4 个或 1 个字节

注意:

位段涉及很多不确定因素,位段是不跨平台的,注重可移植的程序中应该避免使用位段

计算结构体 S 的总大小:

所以以上结构体 S 的总大小为:8字节;因为位段后的 _a ,_b ,_c ,_d 一共 38 个bit位,超出了第一次开辟的4个字节(每个字节8个bit),所以要追加 4 个字节,所以结果是 8 字节

计算结构体 S 的总大小验证:

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值