signed

QiShunwang

“诚信为本、客户至上”

c语言:位段

2021/5/14 23:10:40   来源:

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

和结构体的不同:

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

位段的定义:

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

位段的大小:

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.位段是不能跨平台的。不可移植。

位段的意义:节省空间