c语言:位段

位段是C语言中用于节省空间的一种数据结构,常用于网络底层编程。它允许将整型变量在内存中紧凑排列,但其细节依赖于编译器实现,不具跨平台性。位段成员必须是整型,且大小不能超过编译器int类型的位数。在VS编译器下,如果位段成员超出当前空间,会新开辟内存。位段的主要应用在于数据传输和结构体内的空间优化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 位段
常见于网络底层编程
位段的声明和结构体是类似的

和结构体的不同:

         1.位段的成员必须是整形,通常是一样的
         2.类型 成员名:数字

位段的定义:

//位-二进制位
struct A {
	int a : 2;//a只需要两个比特位
	int b : 5;//b只需要五个比特位
    int c : 10;
    int d : 30;
};

位段的大小(vs编译器):

int main() {
	struct A ss;
	print("%d\n",sizeof(ss));//8
}

首先声明一个int的空间——4个字节、32个bit位。将a写入前两个bit位,将b写入3-7个bit位,将c写入8-17个bit位。

这时只这个空间剩余不足与写入30个bit位大小的d,舍弃剩余空间,开辟一个新的int大小的空间,写入d,剩余两个bit位舍弃。

所以ss大小为8。

注意:int为32bit位大小,成员大小不能大于32,否则会报错。

位段的内存分配:

        1.位段的成员可以是整形家族任意类型。包括char

        2.位段的空间上是按照4个字节(int)和1个字节(char)的方式开辟的。

3.位段是不能跨平台的。不可移植。

        问题在于c语言官方没有定义一些位段的问题,是各个编译器按照自己的理解实现的,如:

                int被当做有符号数还是无符号数是不确定的。

                int中最大位数不确定,如果是16位的机器,int最高位应该是16.

                位段成员从左往右还是从右往左并未有官方标准。

                当位段的一个成员大于当前空间剩余bit位,剩下的bit位是舍弃还是利用,不同的编译器是不一样的。上面举的例子为VS编译器下的位段大小计算

 

位段的意义:节省空间

 

位段的应用:数据传输

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值